You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

1 lines
11 KiB

{"version":3,"sources":["data/index.ts","settings.ts","api/index.ts","pages/Dashboard.tsx","pages/SessionPictures.tsx","pages/Session.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["clients","name","email","phone","activeSession","client","session","apiUrl","createClient","body","a","axios","post","getClient","id","settings","res","data","getSession","clientId","get","killSession","delete","Dashboard","history","useHistory","useState","setName","setEmail","setPhone","handleSubmit","e","preventDefault","push","parseInt","onSubmit","htmlFor","value","onChange","target","type","onClick","SessionPictures","pics","setPics","useEffect","interval","setInterval","previewPics","clearInterval","map","src","Session","props","match","params","submitted","setSubmitted","handleExit","handleNuke","className","App","path","component","exact","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.3f5ea67c.chunk.js","sourcesContent":["import { Client } from '../types'\n\nexport const clients: Client[] = [\n {\n name: 'Elijah',\n email: 'elijah@elijah.com',\n phone: 4039876543,\n },\n {\n name: 'Tanner',\n email: 'tanner@tanner.com',\n phone: 4031234567,\n activeSession: true,\n },\n]\nexport const client: Client = clients[0]\n\nexport const session = [\n '/images/1.jpg',\n '/images/2.jpg',\n '/images/3.jpg',\n '/images/4.jpg',\n]\n","export default {\n env: 'prod',\n}\n","import { Client } from '../types'\nimport axios from 'axios'\nimport { client, clients, session } from '../data'\nimport settings from '../settings'\n\nconst apiUrl = '/api'\n\nexport const createClient = async (body: Client) => {\n await axios.post(`${apiUrl}/clients`, body)\n}\n\nexport const getClients = async (): Promise<Client[]> => {\n if (settings.env === 'jank') return clients\n const res = await axios.post<Client[]>(`${apiUrl}/clients`)\n return res.data\n}\nexport const getClient = async (id: string): Promise<Client> => {\n if (settings.env === 'jank') return client\n const res = await axios.post<Client>(`${apiUrl}/client/${id}`)\n return res.data\n}\nexport const startSession = async (clientId: string) => {\n //\n const res = await axios.post(`${apiUrl}/clients/${clientId}/session`)\n return res.data // session data\n}\n\nexport const getSession = async (\n clientId: string,\n): Promise<null | string[]> => {\n if (settings.env === 'jank') return session\n const res = await axios.get(`${apiUrl}/clients/${clientId}/session`)\n return res.data as null | string[]\n}\n\nexport const killSession = async (clientId: string) => {\n await axios.delete(`${apiUrl}/clients/${clientId}/session`)\n}\n\nexport const restartSession = async (clientId: string) => {\n await killSession(clientId)\n await startSession(clientId)\n}\n\nexport const cleanup = () => {\n // send\n}\n","import React, { FormEvent } from 'react'\nimport { useState } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { createClient } from '../api'\nimport settings from '../settings'\n\nexport const Dashboard = () => {\n const history = useHistory()\n const [name, setName] = useState('')\n const [email, setEmail] = useState('')\n const [phone, setPhone] = useState('')\n\n const handleReset = () => {\n //\n setName('')\n setEmail('')\n setPhone('')\n }\n\n const handleSubmit = async (e: FormEvent) => {\n e.preventDefault()\n\n if (settings.env === 'jank') {\n history.push(`/sessions/${phone}`)\n return\n }\n\n await createClient({ name, email, phone: parseInt(phone) })\n history.push(`/sessions/${phone}`)\n }\n\n return (\n <div>\n <h1>Dashboard</h1>\n <form onSubmit={handleSubmit}>\n <label htmlFor=\"name\">\n Name:\n <input\n value={name}\n onChange={(e) => setName(e.target.value)}\n name=\"name\"\n />\n </label>\n <label htmlFor=\"email\">\n Email:\n <input\n value={email}\n onChange={(e) => setEmail(e.target.value)}\n type=\"email\"\n name=\"email\"\n />\n </label>\n <label htmlFor=\"phone\">\n Phone:\n <input\n value={phone}\n onChange={(e) => setPhone(e.target.value)}\n type=\"tel\"\n name=\"phone\"\n />\n </label>\n <button type=\"submit\">Start Session</button>\n <button type=\"button\" onClick={handleReset}>\n Reset\n </button>\n </form>\n <div>TODO: List of past sessions for review?</div>\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { getSession } from '../api'\n\ntype Props = {\n clientId: string\n}\n\nexport const SessionPictures = ({ clientId }: Props) => {\n const [pics, setPics] = useState<string[] | null>(null)\n\n useEffect(() => {\n const get = async () => {\n if (pics) return\n const previewPics = await getSession(clientId)\n if (previewPics) setPics(previewPics)\n }\n\n const interval = setInterval(get, 300)\n\n return () => clearInterval(interval)\n }, [clientId, pics])\n\n return (\n <div>\n <h3>Session Pictures</h3>\n {pics && pics.map((src) => <img id={src} src={src} />)}\n </div>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { RouteComponentProps, useHistory } from 'react-router-dom'\nimport { getClient, killSession } from '../api'\nimport { SessionPictures } from './SessionPictures'\n\ntype Props = RouteComponentProps<{ clientId: string }>\n\nexport const Session = (props: Props) => {\n const history = useHistory()\n const { clientId } = props.match.params\n const [submitted, setSubmitted] = useState(false)\n\n const handleExit = async () => {\n history.push('/')\n }\n\n const handleNuke = async () => {\n await killSession(clientId)\n history.push('/')\n }\n\n useEffect(() => {\n const get = async () => {\n const { activeSession } = await getClient(clientId)\n if (activeSession) setSubmitted(true)\n }\n\n get()\n })\n\n return (\n <div>\n <h1>Session for {clientId}</h1>\n <button>Capture</button>\n {submitted && <SessionPictures clientId={clientId} />}\n <div className=\"controls\">\n <button onClick={handleNuke}>Nuke Session</button>\n <button onClick={handleExit}>Exit Session</button>\n </div>\n </div>\n )\n}\n","import React from 'react'\nimport './App.css'\n\nimport { BrowserRouter, Switch, Route } from 'react-router-dom'\nimport { Dashboard } from './pages/Dashboard'\nimport { Session } from './pages/Session'\n\nfunction App() {\n return (\n <BrowserRouter>\n <div className=\"App\">\n <Switch>\n <Route path=\"/sessions/:clientId\" component={Session} />\n <Route exact path=\"/\" component={Dashboard} />\n </Switch>\n </div>\n </BrowserRouter>\n )\n}\n\nexport default App\n","import { ReportHandler } from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.css';\nimport App from './App';\nimport reportWebVitals from './reportWebVitals';\n\nReactDOM.render(\n <React.StrictMode>\n <App />\n </React.StrictMode>,\n document.getElementById('root')\n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n"],"sourceRoot":""}