{"version":3,"sources":["components/StatusChip.tsx","api/index.ts","pages/Dashboard.tsx","components/ScrollToTop.tsx","components/SessionPictures.tsx","pages/Session.tsx","App.tsx","reportWebVitals.ts","index.tsx"],"names":["Status","createClient","body","a","axios","post","res","data","client_id","getClient","id","get","startSession","clientId","timings","message","error","getSession","killSession","delete","restartSession","getStatus","status","Dashboard","history","useHistory","useState","setError","Form","useForm","form","handleSubmit","values","phone","length","name","email","parseInt","replace","push","Title","className","level","onFinish","labelCol","span","wrapperCol","Paragraph","style","textAlign","label","minLength","type","justify","danger","onClick","resetFields","htmlType","ScrollToTop","position","right","bottom","window","scrollTo","console","log","SessionPictures","urls","setUrls","activeUrl","setActiveUrl","JSON","parse","localStorage","getItem","focusPhotos","setFocusPhotos","useEffect","interval","setInterval","photos","clearInterval","closeModal","sort","b","split","localeCompare","u","filteredPhotos","filter","num","includes","visible","onOk","footer","onCancel","width","src","alt","align","display","margin","Text","mode","allowClear","placeholder","defaultValue","value","onChange","v","setItem","stringify","map","val","Option","background","Math","floor","marginTop","title","colors","StatusChip","poll","setStatus","color","Session","props","match","params","client","setClient","active","setActive","lightTime","setLightTime","handleTimingUpdate","n","toString","handleStartSession","loading","light_time","handleRestartSession","handleExit","handleNuke","success","has_photos","disabled","onConfirm","e","target","min","max","step","process","App","path","component","exact","reportWebVitals","onPerfEntry","Function","then","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","render","document","getElementById"],"mappings":"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","file":"static/js/main.4388b0cf.chunk.js","sourcesContent":["import { Tag } from 'antd'\nimport { PresetColorType } from 'antd/lib/_util/colors'\nimport { useEffect, useState } from 'react'\nimport { getStatus } from '../api'\n\nexport enum Status {\n 'Standing By...',\n 'Warming Up...',\n 'Capturing Photo',\n 'Capturing Grid',\n 'Writing To Disk',\n 'Downloading!',\n}\n\nconst colors: Partial[] = [\n 'lime',\n 'gold',\n 'volcano',\n 'magenta',\n 'geekblue',\n]\n\ntype Props = {\n poll: boolean\n}\n\nexport const StatusChip = ({ poll }: Props) => {\n const [status, setStatus] = useState(Status['Standing By...'])\n\n useEffect(() => {\n const get = async () => {\n if (!poll) return\n const status = await getStatus()\n setStatus(status)\n }\n\n const interval = setInterval(get, 1000 / 4)\n\n return () => clearInterval(interval)\n }, [poll])\n\n return (\n \n {Status[status]}\n \n )\n}\n","import { Client, Timings } from '../types'\nimport axios from 'axios'\nimport { message } from 'antd'\nimport { Status } from '../components/StatusChip'\n\nconst dev = process.env.NODE_ENV === 'development'\n\nif (dev) {\n const host = 'http://192.168.1.114:5000'\n axios.defaults.baseURL = host\n}\n\nconst mock = false\n\nexport const createClient = async (body: Omit) => {\n if (mock) return 'test'\n const res = await axios.post<{ client_id: string }>(`/api/clients`, body)\n return res.data.client_id\n}\n\nexport const getClient = async (id: string): Promise => {\n if (mock)\n return {\n name: 'Test Client',\n has_photos: false,\n email: 'test@test.test',\n phone: 1234567890,\n }\n const res = await axios.get(`/api/clients/${id}`)\n return res.data\n}\nexport const startSession = async (clientId: string, timings: Timings) => {\n try {\n const res = await axios.post(`/api/clients/${clientId}/session`, timings)\n return res.data\n } catch (err) {\n message.error('Something went wrong, check connection with the machine')\n return err\n }\n}\n\nexport const getSession = async (clientId: string) => {\n const res = await axios.get<{ photos: string[] }>(\n `/api/clients/${clientId}/session`,\n )\n return res.data // session data\n}\n\nexport const killSession = async (clientId: string) => {\n await axios.delete(`/api/clients/${clientId}/session`)\n}\n\nexport const restartSession = async (clientId: string, timings: Timings) => {\n await killSession(clientId)\n await startSession(clientId, timings)\n}\n\n// TOOD: Get status\n\nexport const getStatus = async (): Promise => {\n const res = await axios.get<{ status: Status }>('/api/status')\n return res.data.status\n}\n\n// Someday\n\nexport const getClients = async (): Promise => {\n const res = await axios.get(`/api/clients`)\n return res.data\n}\n\nexport const cleanup = () => {\n // send\n}\n","import React from 'react'\nimport { Button, Divider, Form, Input, message, Row, Typography } from 'antd'\nimport FormItem from 'antd/lib/form/FormItem'\nimport { Content } from 'antd/lib/layout/layout'\nimport { useState } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { createClient } from '../api'\n\ntype FormData = {\n name: string\n email: string\n phone: string\n}\n\nexport const Dashboard = () => {\n const history = useHistory()\n const [error, setError] = useState(null)\n const [form] = Form.useForm()\n\n const handleReset = () => {\n form.resetFields()\n }\n\n const handleSubmit = async (values: FormData) => {\n if (values.phone.length < 10) {\n // helpful message\n message.error('Check all fields!')\n setError('Phone number needs to be a length of at least 10')\n return\n }\n\n const client_id = await createClient({\n name: values.name,\n email: values.email,\n phone: parseInt(values.phone.replace(/\\D/g, '')),\n })\n\n history.push(`/sessions/${client_id}`)\n }\n\n return (\n \n \n Dashboard\n \n \n \n \n Enter the name, email and phone number of the subject\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {error &&

{error}

}\n \n
\n )\n}\n","import { Button } from 'antd'\nimport React from 'react'\n\nexport const ScrollToTop = () => {\n const handleClick = () => {\n window.scrollTo(0, 0)\n console.log('')\n }\n\n return (\n \n ⤴️ Scroll To Top\n \n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Card, Modal, Row, Select, Typography } from 'antd'\nimport { getSession } from '../api'\nimport { ScrollToTop } from './ScrollToTop'\n\ntype Props = {\n clientId: string\n}\n\nexport const SessionPictures = ({ clientId }: Props) => {\n const [urls, setUrls] = useState(null)\n const [activeUrl, setActiveUrl] = useState(null)\n const [focusPhotos, setFocusPhotos] = useState(\n JSON.parse(window.localStorage.getItem('focusPhotos') || '[]'),\n )\n\n useEffect(() => {\n const get = async () => {\n if (urls && urls.length >= 89 * 1) {\n return\n }\n\n const { photos } = await getSession(clientId)\n if (photos.length) setUrls(photos)\n }\n\n const interval = setInterval(get, 250)\n\n return () => clearInterval(interval)\n }, [clientId, urls])\n\n const closeModal = () => setActiveUrl(null)\n\n const host =\n process.env.NODE_ENV === 'development' ? 'http://192.168.1.107:5000' : ''\n\n if (!urls?.length) return null\n\n const photos = urls.sort((a, b) =>\n a.split('_')[0].localeCompare(b.split('_')[0]),\n )\n\n const u = urls.length / 89\n\n const handleSelect = (v: string[]) => {\n console.log('SEelcted', v)\n window.localStorage.setItem('focusPhotos', JSON.stringify(v))\n setFocusPhotos(v)\n }\n\n const filteredPhotos = photos.filter((name) => {\n const num = name.split('_')[0]\n return focusPhotos.includes(num)\n })\n\n return (\n <>\n \n \n \n \n \n Session Pictures\n \n {urls.length}/ 89 loaded\n Select Featured Photos:\n\n \n {photos.map((name) => {\n const val = name.split('_')[0]\n return {val}\n })}\n \n \n\n
\n
\n \n
\n {filteredPhotos.map((src) => (\n setActiveUrl(src)}\n src={`${host}/output/${clientId}/${src}`}\n alt=\"lol\"\n />\n ))}\n
\n
\n {photos.map((src) => (\n \n setActiveUrl(src)}\n src={`${host}/output/${clientId}/${src}`}\n alt=\"lol\"\n />\n \n ))}\n
\n \n \n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { RouteComponentProps, useHistory } from 'react-router-dom'\nimport { getClient, killSession, restartSession, startSession } from '../api'\nimport { SessionPictures } from '../components/SessionPictures'\nimport { StatusChip } from '../components/StatusChip'\n\nimport {\n Button,\n Input,\n InputNumber,\n message,\n Popconfirm,\n Row,\n Typography,\n} from 'antd'\nimport { Content } from 'antd/lib/layout/layout'\nimport { Client } from '../types'\n\ntype Props = RouteComponentProps<{ clientId: string }>\n\nexport const Session = (props: Props) => {\n const history = useHistory()\n const { clientId } = props.match.params\n const [client, setClient] = useState(null)\n const [active, setActive] = useState(false)\n const [lightTime, setLightTime] = useState(\n parseInt(window.localStorage.getItem('lightTime') || '5000'),\n )\n\n const handleTimingUpdate = (n: number) => {\n window.localStorage.setItem('lightTime', n.toString())\n setLightTime(n)\n }\n\n const handleStartSession = async () => {\n message.loading('Photo sequence starting! Stand by...')\n await startSession(clientId, { light_time: lightTime })\n setActive(true)\n }\n\n const handleRestartSession = async () => {\n setActive(false)\n message.loading(\n 'Deleting photos & restarting capture sequence! Stand by...',\n )\n await restartSession(clientId, { light_time: lightTime })\n setActive(true)\n }\n\n const handleExit = async () => {\n history.push('/')\n }\n\n const handleNuke = async () => {\n await killSession(clientId)\n message.success('Photos Deleted! Going back to dashboard')\n history.push('/')\n }\n\n useEffect(() => {\n const get = async () => {\n const client = await getClient(clientId)\n setClient(client)\n if (client.has_photos) setActive(true)\n }\n\n get()\n }, [clientId])\n\n return (\n \n \n Session View\n \n\n \n \n Name: {client?.name}\n \n \n Email: {client?.email}\n \n \n Phone: {client?.phone}\n \n \n
\n \n \n \n Capture\n \n \n \n \n \n \n \n\n \n \n \n

Light Duration (ms)

\n \n handleTimingUpdate(parseInt(e.target.value))}\n value={lightTime}\n min={500}\n max={10000}\n step={500}\n />\n
\n
\n \n {active && }\n \n
\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\nconsole.log('ENV', process.env.NODE_ENV)\n\nfunction App() {\n return (\n \n
\n \n \n \n \n
\n
\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 'antd/dist/antd.css'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\n\nReactDOM.render(, document.getElementById('root'))\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":""}