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
18 KiB

{"version":3,"sources":["components/StatusChip.tsx","api/index.ts","pages/Dashboard.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","message","error","getSession","killSession","delete","restartSession","getStatus","status","Dashboard","history","useHistory","useState","setError","handleSubmit","values","phone","length","name","email","parseInt","replace","push","title","subTitle","className","onFinish","labelCol","span","wrapperCol","label","minLength","type","justify","danger","onClick","htmlType","SessionPictures","urls","setUrls","activeUrl","setActiveUrl","useEffect","interval","setInterval","photos","clearInterval","closeModal","visible","onOk","cancelText","onCancel","width","src","alt","sort","b","split","localeCompare","map","colors","StatusChip","poll","setStatus","color","style","display","margin","Session","props","match","params","client","setClient","active","setActive","handleStartSession","loading","handleRestartSession","handleExit","handleNuke","success","has_photos","Title","Text","disabled","onConfirm","ghost","console","log","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.4a4e0606.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<PresetColorType>[] = [\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>(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 }, [])\n\n return (\n <Tag color={colors[status]} style={{ display: 'flex' }}>\n <span style={{ margin: 'auto' }}>{Status[status]}</span>\n </Tag>\n )\n}\n","import { Client } 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.107:5000'\n axios.defaults.baseURL = host\n}\n\nconst mock = false\n\nexport const createClient = async (body: Omit<Client, 'has_photos'>) => {\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<Client> => {\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<Client>(`/api/clients/${id}`)\n return res.data\n}\nexport const startSession = async (clientId: string) => {\n try {\n const res = await axios.post(`/api/clients/${clientId}/session`)\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) => {\n await killSession(clientId)\n await startSession(clientId)\n}\n\n// TOOD: Get status\n\nexport const getStatus = async (): Promise<Status> => {\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<Client[]> => {\n const res = await axios.get<Client[]>(`/api/clients`)\n return res.data\n}\n\nexport const cleanup = () => {\n // send\n}\n","import { Button, Divider, Form, Input, message, PageHeader, Row } from 'antd'\nimport FormItem from 'antd/lib/form/FormItem'\nimport { Store } from 'antd/lib/form/interface'\nimport { Content } from 'antd/lib/layout/layout'\nimport React, { FormEvent } from 'react'\nimport { useState } from 'react'\nimport { useHistory } from 'react-router-dom'\nimport { createClient } from '../api'\n\nexport const Dashboard = () => {\n const history = useHistory()\n const [error, setError] = useState<string | null>(null)\n\n const handleReset = () => {}\n\n const handleSubmit = async (values: Store) => {\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 <Content>\n <PageHeader\n title=\"Dashboard\"\n subTitle=\"Enter the name, email and phone number of the subject\"\n ></PageHeader>\n <Divider />\n <Form\n className=\"dashboard-form\"\n onFinish={handleSubmit}\n labelCol={{ span: 8 }}\n wrapperCol={{ span: 16 }}\n >\n <FormItem label=\"name\" name=\"name\">\n <Input minLength={3} />\n </FormItem>\n <FormItem label=\"email\" name=\"email\">\n <Input type=\"email\" />\n </FormItem>\n <FormItem label=\"phone\" name=\"phone\">\n <Input type=\"tel\" minLength={10} />\n </FormItem>\n <Row justify=\"space-between\">\n <Button danger onClick={handleReset}>\n Reset\n </Button>\n <Button htmlType=\"submit\" type=\"primary\">\n Start Session\n </Button>\n </Row>\n {error && <p className=\"error\">{error}</p>}\n </Form>\n </Content>\n )\n}\n","import React, { useEffect, useState } from 'react'\nimport { Card, message, Modal, PageHeader, Spin } from 'antd'\nimport { getSession } from '../api'\n\ntype Props = {\n clientId: string\n}\n\nexport const SessionPictures = ({ clientId }: Props) => {\n const [urls, setUrls] = useState<string[] | null>(null)\n const [activeUrl, setActiveUrl] = useState<string | null>(null)\n const [loading, setLoading] = useState(true)\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 return (\n <>\n <Modal\n visible={!!activeUrl}\n onOk={closeModal}\n cancelText={null}\n onCancel={closeModal}\n width=\"50%\"\n >\n <img\n width=\"100%\"\n onClick={closeModal}\n src={`${host}/output/${clientId}/${activeUrl}`}\n alt=\"large modal\"\n ></img>\n </Modal>\n <PageHeader\n title=\"Session Pictures\"\n subTitle={`${urls.length}/${89 * 1} loaded`}\n >\n <div className=\"loading-bar-container\">\n <div className=\"loading-bar\"></div>\n </div>\n </PageHeader>\n <div className=\"photo-wall\">\n {urls ? (\n urls\n .sort((a, b) => a.split('_')[0].localeCompare(b.split('_')[0]))\n .map((src) => (\n <Card key={src} className=\"photo\" title={src.split('_')[0]}>\n <img\n onClick={() => setActiveUrl(src)}\n src={`${host}/output/${clientId}/${src}`}\n alt=\"lol\"\n />\n </Card>\n ))\n ) : (\n <Spin />\n )}\n </div>\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 { Button, Divider, message, Popconfirm, Row, Typography } 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<Client | null>(null)\n const [active, setActive] = useState(false)\n\n const handleStartSession = async () => {\n message.loading('Photo sequence starting! Stand by...')\n await startSession(clientId)\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)\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 <Content>\n <Row justify=\"center\">\n <Typography.Title>Client: {client?.name}</Typography.Title>\n </Row>\n\n <Row justify=\"space-around\" style={{ width: '60%', margin: 'auto' }}>\n <Typography.Text>\n <strong>email:</strong> {client?.email}\n </Typography.Text>\n <Typography.Text>\n <strong>phone:</strong> {client?.phone}\n </Typography.Text>\n </Row>\n <Divider />\n\n <Row justify=\"center\" className=\"session-header\">\n <Button\n key=\"startsession\"\n disabled={active}\n type=\"primary\"\n onClick={handleStartSession}\n >\n Capture\n </Button>\n <Popconfirm\n disabled={!active}\n key=\"retry\"\n title=\"Re-capture set?\"\n onConfirm={handleRestartSession}\n >\n <Button type=\"default\" disabled={!active}>\n Retry Capture\n </Button>\n </Popconfirm>\n <Popconfirm\n key=\"nuke\"\n disabled={!active}\n title=\"Delete all photos and return to dashboard?\"\n onConfirm={handleNuke}\n >\n <Button danger disabled={!active}>\n Abort Session\n </Button>\n </Popconfirm>\n <Button\n key=\"finish\"\n ghost\n type=\"primary\"\n disabled={!active}\n onClick={handleExit}\n >\n Finish Session\n </Button>\n <StatusChip poll={true} />\n </Row>\n\n <Divider />\n <Row className=\"controls\">\n {active && <SessionPictures clientId={clientId} />}\n </Row>\n </Content>\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 <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 'antd/dist/antd.css'\nimport App from './App'\nimport reportWebVitals from './reportWebVitals'\n\nReactDOM.render(<App />, 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":""}