{"version":3,"sources":["components/appliedRoute.js","containers/home.js","containers/devices.js","containers/notFound.js","components/loaderButton.js","containers/login.js","containers/signup.js","routes.js","App.js","config.js","index.js"],"names":["C","component","cProps","props","rest","render","Home","style","height","width","backgroundImage","fontSize","paddingTop","textAlign","fontWeight","color","Component","canvasWidth","canvasHeight","outsideRadius","textRadius","arc","Math","PI","Devices","canvasRef","React","createRef","state","displayFull","displaySmall","displayMedium","displayConfirm","devices","sel","deviceId","updateWindowSize","bind","this","isAuthenticated","currUser","history","push","API","get","then","setState","catch","err","console","log","window","addEventListener","removeEventListener","innerWidth","innerHeight","event","target","name","indexOf","device","split","parseInt","value","drawWheel","id","post","resp","idx","del","splice","colors","length","vals","current","getContext","clearRect","put","body","result","dir","isNaN","round","parseFloat","ctx","strokeStyle","lineWidth","font","forEach","c","i","angle","fillStyle","beginPath","fill","stroke","save","shadowOffsetX","shadowOffsetY","shadowBlur","shadowColor","translate","cos","sin","rotate","text","fillText","measureText","restore","moveTo","lineTo","className","maxWidth","minWidth","float","map","d","didx","marginTop","type","checked","onChange","handleDeviceSel","onClick","handleDelDevice","ref","handleAddConfig","v","vidx","margin","handleTextInput","placeholder","handleMove","handleValueDelete","handleSaveConfig","htmlFor","marginRight","marginLeft","handleAddDevice","border","handleCancelDelDevice","LoaderButton","isLoading","loadingText","disabled","Button","Login","handleSubmit","a","preventDefault","Auth","signIn","email","pw","currentAuthenticatedUser","setCurrUser","userHasAuthenticated","alert","message","handleChange","field","onSubmit","Form","Group","controlId","Label","Control","autoFocus","isValid","getValidation","block","size","formIsValid","Signup","replace","signUp","username","password","user","code","resendSignUp","handleConfirmSubmit","confirmSignUp","setUser","cpw","test","Text","codeIsValid","getConfirmForm","getUserForm","childProps","path","exact","NotFound","require","config","App","authenticated","setWheel","isAuthenticating","loadingCss","loadedCss","currentSession","location","search","params","URLSearchParams","setTimeout","signOut","global","Navbar","collapseOnSelect","bg","expand","to","Brand","bsPrefix","Toggle","Collapse","Nav","activeKey","pathname","Link","firstName","handleLogout","cursor","withRouter","apiGateway","REGION","URL","cognito","USER_POOL_ID","APP_CLIENT_ID","IDENTITY_POOL_ID","Amplify","configure","mandatorySignIn","region","userPoolId","identityPoolId","userPoolWebClientId","endpoints","endpoint","ReactDOM","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.55637931.chunk.js","sourcesContent":["import React from 'react'\r\nimport { Route } from 'react-router-dom'\r\n\r\nexport default ({ component: C, props: cProps, ...rest }) => \r\n } />\r\n","import { Component } from 'react'\r\nimport './home.css'\r\n\r\nclass Home extends Component {\r\n\r\n render() {\r\n return (\r\n
\r\n
Coming Soon
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Home","import React, { Component } from 'react'\r\nimport './devices.css'\r\nimport { API } from 'aws-amplify'\r\nimport { FaArrowCircleDown, FaArrowAltCircleUp, FaTrashAlt } from 'react-icons/fa'\r\n\r\nconst canvasWidth = 350\r\nconst canvasHeight = 350\r\nconst outsideRadius = canvasWidth / 2 - 5\r\nconst insideRadius = 5\r\nlet textRadius = (13 / 32 * canvasWidth)\r\nlet startAngle = 0;\r\nlet arc = Math.PI / 1;\r\n\r\n\r\nclass Devices extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.canvasRef = React.createRef()\r\n this.state = {\r\n width: 0,\r\n height: 0,\r\n displayFull: true,\r\n displaySmall: false,\r\n displayMedium: false,\r\n displayConfirm: false,\r\n devices: [],\r\n sel: -1,\r\n deviceId: ''\r\n }\r\n this.updateWindowSize = this.updateWindowSize.bind(this)\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.isAuthenticated || !this.props.currUser) {\r\n this.props.history.push('/')\r\n return false\r\n }\r\n API.get('tc', 'devices')\r\n .then(devices => this.setState({ devices }))\r\n .catch(err => console.log(err))\r\n this.updateWindowSize()\r\n window.addEventListener('resize', this.updateWindowSize)\r\n if (this.props.deviceId) this.setState({ deviceId: this.props.deviceId })\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.updateWindowSize)\r\n }\r\n\r\n updateWindowSize() {\r\n this.setState({\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n displayFull: window.innerWidth > 1155,\r\n displaySmall: window.innerWidth < 650,\r\n displayMedium: window.innerWidth < 760 && window.innerWidth >= 650\r\n })\r\n }\r\n\r\n handleTextInput(event) {\r\n if (event.target.name.indexOf('device-') === 0) {\r\n let device = { ...this.state.devices[this.state.sel] }\r\n device[event.target.name.split('-')[1]][parseInt(event.target.name.split('-')[2])] = event.target.value\r\n let devices = [...this.state.devices]\r\n devices[this.state.sel] = device\r\n this.setState({ devices })\r\n this.drawWheel()\r\n } else this.setState({ [event.target.name]: event.target.value })\r\n }\r\n\r\n handleAddDevice(id) {\r\n API.post('tc', `devices/${id}`)\r\n .then(resp => this.setState({ devices: [...this.state.devices, resp] }))\r\n }\r\n\r\n handleDelDevice(idx) {\r\n if (this.state.displayConfirm) {\r\n API.del('tc', `devices/${this.state.devices[this.state.sel].deviceId}`)\r\n .then(resp => this.setState({ sel: null, displayConfirm: false, devices: [...this.state.devices.splice(this.state.sel, 1)] }))\r\n .catch(err => console.log(err))\r\n } else {\r\n if (idx === this.state.sel) {\r\n this.setState({ displayConfirm: true })\r\n } else this.setState({ sel: idx })\r\n }\r\n }\r\n\r\n handleCancelDelDevice() {\r\n this.setState({ displayConfirm: false })\r\n }\r\n\r\n handleDeviceSel(sel) {\r\n this.setState({ sel })\r\n if (this.state.devices[sel].colors && this.state.devices[sel].colors.length > 0 && this.state.devices[sel].vals && this.state.devices[sel].vals.length > 0) {\r\n this.drawWheel(sel)\r\n } else {\r\n const canvas = this.canvasRef.current\r\n const ctx = canvas.getContext('2d')\r\n ctx.clearRect(0, 0, 400, 400)\r\n }\r\n }\r\n\r\n handleAddConfig() {\r\n if (this.state.sel > -1) {\r\n const device = { ...this.state.devices[this.state.sel] }\r\n device.colors.push('')\r\n device.vals.push('')\r\n let devices = [...this.state.devices]\r\n devices[this.state.sel] = device\r\n this.setState({ devices })\r\n }\r\n }\r\n\r\n handleValueDelete(idx) {\r\n let device = { ...this.state.devices[this.state.sel] }\r\n device.colors.splice(idx, 1)\r\n device.vals.splice(idx, 1)\r\n let devices = [...this.state.devices]\r\n devices[this.state.sel] = device\r\n this.setState({ devices })\r\n this.drawWheel()\r\n }\r\n\r\n handleSaveConfig() {\r\n API.put('tc', `devices/${this.state.devices[this.state.sel].deviceId}`, { body: { vals: this.state.devices[this.state.sel].vals, colors: this.state.devices[this.state.sel].colors } })\r\n .then(result => console.log(result))\r\n .catch(err => console.log(err))\r\n }\r\n\r\n handleMove(dir, idx) {\r\n if (!(dir === 'up' && idx === 0) && !(dir === 'down' && idx === this.state.devices[this.state.sel].vals.length - 1)) {\r\n let device = { ...this.state.devices[this.state.sel] }\r\n device.vals.splice(dir === 'up' ? idx - 1 : idx + 1, 0, device.vals.splice(idx, 1)[0])\r\n device.colors.splice(dir === 'up' ? idx - 1 : idx + 1, 0, device.colors.splice(idx, 1)[0])\r\n let devices = [...this.state.devices]\r\n devices[this.state.sel] = device\r\n this.setState({ devices })\r\n this.drawWheel()\r\n }\r\n }\r\n\r\n drawWheel(sel) {\r\n //console.log('draw wheel', sel)\r\n textRadius = (13 / 32 * canvasWidth)\r\n if (this.state.devices[isNaN(sel) ? this.state.sel : sel].vals.length < 5) {\r\n textRadius = textRadius - Math.round(70 / this.state.devices[isNaN(sel) ? this.state.sel : sel].vals.length)\r\n }\r\n\r\n arc = Math.PI / (parseFloat(this.state.devices[isNaN(sel) ? this.state.sel : sel].colors.length) / 2.0)\r\n const canvas = this.canvasRef.current\r\n const ctx = canvas.getContext('2d')\r\n ctx.clearRect(0, 0, 400, 400)\r\n ctx.strokeStyle = \"black\"\r\n ctx.lineWidth = 2\r\n ctx.font = 'bold 12px Helvetica, Arial'\r\n this.state.devices[isNaN(sel) ? this.state.sel : sel].colors.forEach((c, i) => {\r\n let angle = startAngle + i * arc\r\n ctx.fillStyle = c\r\n ctx.beginPath()\r\n ctx.arc(canvasWidth / 2, canvasHeight / 2, outsideRadius, angle, angle + arc, false)\r\n ctx.arc(canvasWidth / 2, canvasHeight / 2, insideRadius, angle + arc, angle, true)\r\n ctx.fill()\r\n ctx.stroke()\r\n ctx.fill()\r\n ctx.save()\r\n ctx.shadowOffsetX = -1\r\n ctx.shadowOffsetY = -1\r\n ctx.shadowBlur = 0\r\n ctx.shadowColor = \"rgb(220,220,220)\"\r\n ctx.fillStyle = \"black\"\r\n ctx.translate((canvasWidth / 2) + Math.cos(angle + arc / 2) * textRadius, (canvasHeight / 2) + Math.sin(angle + arc / 2) * textRadius)\r\n ctx.rotate(angle + arc / 2 + Math.PI / 2)\r\n let text = this.state.devices[isNaN(sel) ? this.state.sel : sel].vals[i]\r\n ctx.font = `bold ${(Math.round(2 * (Math.sin((360 / this.state.devices[isNaN(sel) ? this.state.sel : sel].vals.length / 2) * (Math.PI / 180)) * textRadius) / text.length * 1.1)) > 56 ? 56 : (Math.round(2 * (Math.sin((360 / this.state.devices[isNaN(sel) ? this.state.sel : sel].vals.length / 2) * (Math.PI / 180)) * textRadius) / text.length * 1.1))}px Helvetica, Arial`\r\n console.log(ctx.font)\r\n ctx.fillText(text, -ctx.measureText(text).width / 2, 0)\r\n\r\n ctx.restore()\r\n //arrow\r\n ctx.fillStyle = \"black\"\r\n ctx.beginPath()\r\n ctx.moveTo((canvasWidth / 2) - 4, (canvasHeight / 2) - (outsideRadius + 5))\r\n ctx.lineTo((canvasWidth / 2) + 4, (canvasHeight / 2) - (outsideRadius + 5))\r\n ctx.lineTo((canvasWidth / 2) + 4, (canvasHeight / 2) - (outsideRadius - 5))\r\n ctx.lineTo((canvasWidth / 2) + 9, (canvasHeight / 2) - (outsideRadius - 5))\r\n ctx.lineTo((canvasWidth / 2) + 0, (canvasHeight / 2) - (outsideRadius - 13))\r\n ctx.lineTo((canvasWidth / 2) - 9, (canvasHeight / 2) - (outsideRadius - 5))\r\n ctx.lineTo((canvasWidth / 2) - 4, (canvasHeight / 2) - (outsideRadius - 5))\r\n ctx.lineTo((canvasWidth / 2) - 4, (canvasHeight / 2) - (outsideRadius + 5))\r\n ctx.fill()\r\n })\r\n }\r\n\r\n render() {\r\n console.log(this.state)\r\n return
\r\n
My Devices
\r\n
\r\n
\r\n
\r\n
 
\r\n
Device ID
\r\n
Device Type
\r\n
Forget Device
\r\n
\r\n
\r\n {\r\n this.state.devices.map((d, didx) => {\r\n return
\r\n
this.handleDeviceSel(didx)} />
\r\n
this.handleDeviceSel(didx)}>{d.deviceId}
\r\n
this.handleDeviceSel(didx)}>{d.type}
\r\n
this.handleDelDevice(didx)}>Release
\r\n
\r\n })\r\n }\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n {this.state.sel > -1 &&
\r\n
\r\n
Value
\r\n
Color
\r\n
Move Up
\r\n
Move Down
\r\n
this.handleAddConfig()}>Add
\r\n
\r\n
\r\n {\r\n this.state.devices[this.state.sel].vals.map((v, vidx) => {\r\n return
\r\n
this.handleTextInput(event)} placeholder=\"Display Text\" />
\r\n
this.handleTextInput(event)} placeholder=\"Color Code\" />
\r\n
this.handleMove('up', vidx)}>
\r\n
this.handleMove('down', vidx)}>
\r\n
this.handleValueDelete(vidx)}>
\r\n
\r\n })\r\n }\r\n
\r\n
this.handleSaveConfig()}>Save
\r\n
}\r\n
\r\n
\r\n
Add Device
\r\n
\r\n \r\n this.handleTextInput(event)} placeholder=\"Enter ID from Device\" />\r\n
this.handleAddDevice(this.state.deviceId)}>Add
\r\n
\r\n {\r\n this.state.displayConfirm &&
\r\n
Are you sure you want to release this device?
\r\n
\r\n
this.handleCancelDelDevice()}>Cancel
\r\n
this.handleDelDevice()}>Remove
\r\n
\r\n
\r\n }\r\n
\r\n }\r\n}\r\n\r\nexport default Devices","import React from 'react'\r\n\r\nconst style = {paddingTop: '20vh', textAlign: 'center'}\r\n\r\nexport default () => \r\n
\r\n

Sorry, page not found!

\r\n
","import React from 'react'\r\nimport Button from \"react-bootstrap/Button\"\r\nimport { BsArrowRepeat } from \"react-icons/bs\"\r\nimport './loaderButton.css'\r\n\r\nexport default function LoaderButton({\r\n isLoading,\r\n text,\r\n loadingText,\r\n className = '',\r\n disabled = false,\r\n ...props\r\n}) {\r\n return (\r\n \r\n )\r\n}\r\n","import React, { Component } from 'react'\r\nimport Form from \"react-bootstrap/Form\"\r\nimport LoaderButton from '../components/loaderButton'\r\nimport { Auth, API } from 'aws-amplify'\r\nimport './login.css'\r\n\r\nclass Login extends Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n email: '',\r\n pw: '',\r\n isLoading: false\r\n }\r\n }\r\n\r\n formIsValid() {\r\n return this.state.email.length > 0 && this.state.pw.length > 0\r\n }\r\n\r\n handleSubmit = async event => {\r\n event.preventDefault()\r\n this.setState({ isLoading: true })\r\n try {\r\n await Auth.signIn(this.state.email, this.state.pw)\r\n let currUser = await Auth.currentAuthenticatedUser()\r\n //let user = await API.get('gwh', `user`)\r\n //this.props.setUser(user.data && user.data[0] ? user.data[0] : null)\r\n this.props.setCurrUser(currUser)\r\n this.props.userHasAuthenticated(true)\r\n //console.log('Success - go to main page')\r\n this.props.history.push('/')\r\n } catch (e) {\r\n alert(e.message)\r\n console.log(e)\r\n this.setState({ isLoading: false })\r\n }\r\n }\r\n\r\n handleChange = event => {\r\n this.setState({\r\n [event.target.id]: event.target.value\r\n })\r\n }\r\n\r\n getValidation(field) {\r\n return this.state[field].length > 7\r\n }\r\n\r\n render() {\r\n return (\r\n
\r\n
\r\n \r\n Email\r\n \r\n \r\n \r\n Password\r\n \r\n \r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Login ","import React, { Component } from 'react'\r\nimport Form from \"react-bootstrap/Form\"\r\nimport LoaderButton from '../components/loaderButton'\r\nimport './signup.css'\r\nimport { Auth, API } from 'aws-amplify';\r\n\r\nclass Signup extends Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n isLoading: false,\r\n email: '',\r\n pw: '',\r\n cpw: '',\r\n code: '',\r\n user: false,\r\n }\r\n }\r\n\r\n formIsValid() {\r\n return (\r\n this.state.email.length > 0 &&\r\n this.state.pw.length > 0 && /[A-Z]/.test(this.state.pw) && /\\d/.test(this.state.pw) && /\\W/.test(this.state.pw) &&\r\n this.state.cpw === this.state.pw \r\n )\r\n }\r\n\r\n codeIsValid() {\r\n return this.state.code.length > 0\r\n }\r\n\r\n handleChange = event => {\r\n switch(event.target.id) {\r\n case 'pw':\r\n this.setState({ [event.target.id]: event.target.value.replace(/[<>// ]/g, \"\") })\r\n break\r\n case 'cpw':\r\n this.setState({ [event.target.id]: event.target.value.replace(/[<>// ]/g, \"\") })\r\n break\r\n case 'email':\r\n this.setState({ [event.target.id]: event.target.value.replace(/[^a-zA-Z0-9-@. ]/g, \"\") })\r\n break\r\n default:\r\n this.setState({ [event.target.id]: event.target.value.replace(/[^a-zA-Z0-9- ]/g, \"\") })\r\n }\r\n }\r\n\r\n handleSubmit = async event => {\r\n event.preventDefault()\r\n\r\n this.setState({ isLoading: true })\r\n\r\n try {\r\n const user = await Auth.signUp({\r\n username: this.state.email,\r\n password: this.state.pw\r\n })\r\n this.setState({ user })\r\n } catch (e) {\r\n if (e.code === 'UsernameExistsException') {\r\n Auth.resendSignUp(this.state.email)\r\n this.setState({ user: true })\r\n } else {\r\n alert(e.message)\r\n }\r\n }\r\n this.setState({ isLoading: false })\r\n }\r\n\r\n handleConfirmSubmit = async event => {\r\n event.preventDefault()\r\n\r\n this.setState({ isLoading: true })\r\n\r\n try {\r\n await Auth.confirmSignUp(this.state.email, this.state.code)\r\n await Auth.signIn(this.state.email, this.state.pw)\r\n let currUser = await Auth.currentAuthenticatedUser()\r\n this.props.setCurrUser(currUser)\r\n API.post('gwh', 'user', {\r\n body: {\r\n email: this.state.email\r\n }\r\n })\r\n this.props.setUser({\r\n email: this.state.email\r\n })\r\n this.props.userHasAuthenticated(true)\r\n this.props.history.push('/')\r\n } catch (e) {\r\n alert(e.message)\r\n this.setState({ isLoading: false })\r\n }\r\n }\r\n\r\n\r\n\r\n getValidation(field) {\r\n switch (field) {\r\n case 'email':\r\n return this.state.email.length > 0\r\n case 'pw':\r\n return this.state.pw.length > 7 && /[A-Z]/.test(this.state.pw) && /\\d/.test(this.state.pw) && /\\W/.test(this.state.pw)\r\n case 'cpw':\r\n return this.state.cpw.length > 7 && this.state.cpw === this.state.pw\r\n default:\r\n return true\r\n }\r\n }\r\n\r\n getUserForm() {\r\n return (\r\n
\r\n \r\n Email\r\n \r\n \r\n \r\n Password\r\n \r\n Password must be at least 8 characters, 1 number, 1 special character and 1 uppercase letter\r\n \r\n \r\n Re-enter Password\r\n \r\n \r\n \r\n \r\n )\r\n }\r\n\r\n getConfirmForm() {\r\n return (\r\n
\r\n \r\n Confirmation Code\r\n \r\n Please check your email for the code.\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n render() {\r\n //console.log(this.state, this.props)\r\n return (\r\n
\r\n {this.state.user ? this.getConfirmForm() : this.getUserForm()}\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default Signup","import React from \"react\"\r\nimport { Route, Switch } from \"react-router-dom\"\r\nimport AppliedRoute from './components/appliedRoute'\r\nimport Home from \"./containers/home\"\r\nimport Devices from \"./containers/devices\"\r\nimport NotFound from './containers/notFound'\r\nimport Login from './containers/login'\r\nimport Signup from './containers/signup'\r\n\r\nexport default ({ childProps }) =>\r\n \r\n \r\n \r\n \r\n \r\n \r\n ","import React, { Component } from 'react'\r\nimport Navbar from 'react-bootstrap/Navbar'\r\nimport Nav from \"react-bootstrap/Nav\"\r\nimport { LinkContainer } from \"react-router-bootstrap\"\r\nimport { withRouter } from 'react-router-dom'\r\nimport Routes from './routes'\r\nimport { Auth } from 'aws-amplify'\r\nimport './App.css'\r\nrequire('dotenv').config()\r\n\r\n\r\nclass App extends Component {\r\n constructor(props) {\r\n super(props)\r\n\r\n this.state = {\r\n isAuthenticated: false,\r\n isAuthenticating: true,\r\n currUser: null,\r\n loadingCss: 'App-Loading-Bar-Init',\r\n loadedCss: 'App-Faded',\r\n deviceId: null\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n try {\r\n await Auth.currentSession()\r\n let currUser = await Auth.currentAuthenticatedUser()\r\n // let user = await API.get('tc', `user`)\r\n this.setState({ loadingCss: 'App-Loading-Bar-Final', currUser })\r\n this.userHasAuthenticated(true)\r\n } catch (e) {\r\n if (e.message !== 'No Current User') console.log('error ', e)\r\n }\r\n if(this.props.location.search) {\r\n const params = new URLSearchParams(this.props.location.search)\r\n if(params.get('code')) this.setState({deviceId: params.get('code')})\r\n } \r\n setTimeout(() => this.setState({ loadingCss: 'App-Loading-Bar-Post' }), 230)\r\n setTimeout(() => this.setState({ isAuthenticating: false, loadedCss: 'App-Showing' }), 500)\r\n }\r\n\r\n userHasAuthenticated = authenticated => {\r\n this.setState({ isAuthenticated: authenticated })\r\n }\r\n\r\n setUser = user => { this.setState({ user }) }\r\n setCurrUser = currUser => { this.setState({ currUser }) }\r\n setWheel = deviceId => { this.setState({ deviceId }) }\r\n\r\n async handleLogout() {\r\n try {\r\n await Auth.signOut({ global: true })\r\n this.props.history.push('/login')\r\n } catch (e) {\r\n console.log(e.message)\r\n }\r\n this.setState({ user: null, currUser: null })\r\n this.userHasAuthenticated(false)\r\n }\r\n\r\n render() {\r\n const childProps = {\r\n isAuthenticated: this.state.isAuthenticated,\r\n userHasAuthenticated: this.userHasAuthenticated,\r\n setCurrUser: this.setCurrUser,\r\n setUser: this.setUser,\r\n currUser: this.state.currUser,\r\n deviceId: this.state.deviceId\r\n }\r\n\r\n console.log(this.state, this.props)\r\n return (\r\n !this.state.isAuthenticating ?\r\n
\r\n \r\n \r\n \r\n Touchless Constructs\r\n \r\n \r\n \r\n {\r\n this.state.isAuthenticated && \r\n \r\n \r\n }\r\n \r\n {\r\n !this.state.isAuthenticated ?\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(App);\r\n","const config = {\r\n apiGateway: {\r\n REGION: \"us-east-1\",\r\n URL: \"https://nvnjfyi7xi.execute-api.us-east-1.amazonaws.com/prod/\"\r\n },\r\n cognito: {\r\n REGION: 'us-east-1',\r\n USER_POOL_ID: 'us-east-1_B4y6WTJFt',\r\n APP_CLIENT_ID: '77rnnvecgjbm8q0b0g0991ej2c',\r\n IDENTITY_POOL_ID: 'us-east-1:800062dc-abab-4768-81c7-f6c5aac37605'\r\n }\r\n}\r\n\r\nexport default config\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\n//import reportWebVitals from './reportWebVitals';\r\nimport { BrowserRouter as Router } from 'react-router-dom';\r\nimport { Amplify } from 'aws-amplify';\r\nimport config from './config';\r\n\r\nAmplify.configure({\r\n Auth: {\r\n mandatorySignIn: true,\r\n region: config.cognito.REGION,\r\n userPoolId: config.cognito.USER_POOL_ID,\r\n identityPoolId: config.cognito.IDENTITY_POOL_ID,\r\n userPoolWebClientId: config.cognito.APP_CLIENT_ID\r\n },\r\n API: {\r\n endpoints: [\r\n {\r\n name: \"tc\",\r\n endpoint: config.apiGateway.URL,\r\n region: config.apiGateway.REGION\r\n },\r\n ]\r\n }\r\n});\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want to start measuring performance in your app, pass a function\r\n// to log results (for example: reportWebVitals(console.log))\r\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\r\n//reportWebVitals();\r\n"],"sourceRoot":""}