💅
This commit is contained in:
parent
15023b0e24
commit
c29a64b1cc
|
@ -1,25 +1,25 @@
|
||||||
{
|
{
|
||||||
"files": {
|
"files": {
|
||||||
"main.css": "/static/css/main.df392f58.chunk.css",
|
"main.css": "/static/css/main.15b3868d.chunk.css",
|
||||||
"main.js": "/static/js/main.eb0b3235.chunk.js",
|
"main.js": "/static/js/main.4a4e0606.chunk.js",
|
||||||
"main.js.map": "/static/js/main.eb0b3235.chunk.js.map",
|
"main.js.map": "/static/js/main.4a4e0606.chunk.js.map",
|
||||||
"runtime-main.js": "/static/js/runtime-main.3a03ddd0.js",
|
"runtime-main.js": "/static/js/runtime-main.e5089e68.js",
|
||||||
"runtime-main.js.map": "/static/js/runtime-main.3a03ddd0.js.map",
|
"runtime-main.js.map": "/static/js/runtime-main.e5089e68.js.map",
|
||||||
"static/css/2.015dc0ab.chunk.css": "/static/css/2.015dc0ab.chunk.css",
|
"static/css/2.015dc0ab.chunk.css": "/static/css/2.015dc0ab.chunk.css",
|
||||||
"static/js/2.cab625a2.chunk.js": "/static/js/2.cab625a2.chunk.js",
|
"static/js/2.d35ab7cd.chunk.js": "/static/js/2.d35ab7cd.chunk.js",
|
||||||
"static/js/2.cab625a2.chunk.js.map": "/static/js/2.cab625a2.chunk.js.map",
|
"static/js/2.d35ab7cd.chunk.js.map": "/static/js/2.d35ab7cd.chunk.js.map",
|
||||||
"static/js/3.2f629505.chunk.js": "/static/js/3.2f629505.chunk.js",
|
"static/js/3.fc2e2142.chunk.js": "/static/js/3.fc2e2142.chunk.js",
|
||||||
"static/js/3.2f629505.chunk.js.map": "/static/js/3.2f629505.chunk.js.map",
|
"static/js/3.fc2e2142.chunk.js.map": "/static/js/3.fc2e2142.chunk.js.map",
|
||||||
"index.html": "/index.html",
|
"index.html": "/index.html",
|
||||||
"static/css/2.015dc0ab.chunk.css.map": "/static/css/2.015dc0ab.chunk.css.map",
|
"static/css/2.015dc0ab.chunk.css.map": "/static/css/2.015dc0ab.chunk.css.map",
|
||||||
"static/css/main.df392f58.chunk.css.map": "/static/css/main.df392f58.chunk.css.map",
|
"static/css/main.15b3868d.chunk.css.map": "/static/css/main.15b3868d.chunk.css.map",
|
||||||
"static/js/2.cab625a2.chunk.js.LICENSE.txt": "/static/js/2.cab625a2.chunk.js.LICENSE.txt"
|
"static/js/2.d35ab7cd.chunk.js.LICENSE.txt": "/static/js/2.d35ab7cd.chunk.js.LICENSE.txt"
|
||||||
},
|
},
|
||||||
"entrypoints": [
|
"entrypoints": [
|
||||||
"static/js/runtime-main.3a03ddd0.js",
|
"static/js/runtime-main.e5089e68.js",
|
||||||
"static/css/2.015dc0ab.chunk.css",
|
"static/css/2.015dc0ab.chunk.css",
|
||||||
"static/js/2.cab625a2.chunk.js",
|
"static/js/2.d35ab7cd.chunk.js",
|
||||||
"static/css/main.df392f58.chunk.css",
|
"static/css/main.15b3868d.chunk.css",
|
||||||
"static/js/main.eb0b3235.chunk.js"
|
"static/js/main.4a4e0606.chunk.js"
|
||||||
]
|
]
|
||||||
}
|
}
|
|
@ -1 +1 @@
|
||||||
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="3D Shock by Tanner and Elijah enterprises"/><link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>⚡</text></svg>"><link rel="manifest" href="/manifest.json"/><title>3D Shock!</title><link href="/static/css/2.015dc0ab.chunk.css" rel="stylesheet"><link href="/static/css/main.df392f58.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function t(t){for(var n,i,a=t[0],c=t[1],l=t[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(t);p.length;)p.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,a=1;a<r.length;a++){var c=r[a];0!==o[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"2f629505"}[e]+".chunk.js"}(e);var c=new Error;u=function(t){a.onerror=a.onload=null,clearTimeout(l);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,r[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpclient=this.webpackJsonpclient||[],c=a.push.bind(a);a.push=t,a=a.slice();for(var l=0;l<a.length;l++)t(a[l]);var f=c;r()}([])</script><script src="/static/js/2.cab625a2.chunk.js"></script><script src="/static/js/main.eb0b3235.chunk.js"></script></body></html>
|
<!doctype html><html lang="en"><head><meta charset="utf-8"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="3D Shock by Tanner and Elijah enterprises"/><link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>⚡</text></svg>"><link rel="manifest" href="/manifest.json"/><title>3D Shock!</title><link href="/static/css/2.015dc0ab.chunk.css" rel="stylesheet"><link href="/static/css/main.15b3868d.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(e){function t(t){for(var n,i,a=t[0],c=t[1],l=t[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(t);p.length;)p.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,a=1;a<r.length;a++){var c=r[a];0!==o[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"fc2e2142"}[e]+".chunk.js"}(e);var c=new Error;u=function(t){a.onerror=a.onload=null,clearTimeout(l);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,r[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpclient=this.webpackJsonpclient||[],c=a.push.bind(a);a.push=t,a=a.slice();for(var l=0;l<a.length;l++)t(a[l]);var f=c;r()}([])</script><script src="/static/js/2.d35ab7cd.chunk.js"></script><script src="/static/js/main.4a4e0606.chunk.js"></script></body></html>
|
|
@ -1,2 +1,2 @@
|
||||||
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}form{max-width:500px;-webkit-flex-direction:column;flex-direction:column}form,form label{display:-webkit-flex;display:flex;margin:auto}form label{width:100%;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{-webkit-animation:App-logo-spin 20s linear infinite;animation:App-logo-spin 20s linear infinite}}.App-header{background-color:#282c34;min-height:100vh;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff}.App-link{color:#61dafb}@-webkit-keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.error{color:red}.photo-wall{display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:2rem}.ant-card{margin:1rem}.ant-card img{max-width:250px}
|
body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","Roboto","Oxygen","Ubuntu","Cantarell","Fira Sans","Droid Sans","Helvetica Neue",sans-serif;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}code{font-family:source-code-pro,Menlo,Monaco,Consolas,"Courier New",monospace}form{max-width:500px;-webkit-flex-direction:column;flex-direction:column}form,form label{display:-webkit-flex;display:flex;margin:auto}form label{width:100%;-webkit-flex-direction:row;flex-direction:row;-webkit-justify-content:space-between;justify-content:space-between}.App{text-align:center}.App-logo{height:40vmin;pointer-events:none}@media (prefers-reduced-motion:no-preference){.App-logo{-webkit-animation:App-logo-spin 20s linear infinite;animation:App-logo-spin 20s linear infinite}}.App-header{background-color:#282c34;min-height:100vh;display:-webkit-flex;display:flex;-webkit-flex-direction:column;flex-direction:column;-webkit-align-items:center;align-items:center;-webkit-justify-content:center;justify-content:center;font-size:calc(10px + 2vmin);color:#fff}.App-link{color:#61dafb}@-webkit-keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes App-logo-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.error{color:red}.photo-wall{display:-webkit-flex;display:flex;-webkit-flex-wrap:wrap;flex-wrap:wrap;margin:2rem}.dashboard-form{margin:auto}.ant-card{margin:1rem}.ant-card img{max-width:250px}.loading-bar-container{background:#282c34;width:100%}.loading-bar{background:green}
|
||||||
/*# sourceMappingURL=main.df392f58.chunk.css.map */
|
/*# sourceMappingURL=main.15b3868d.chunk.css.map */
|
1
client/build/static/css/main.15b3868d.chunk.css.map
Normal file
1
client/build/static/css/main.15b3868d.chunk.css.map
Normal file
|
@ -0,0 +1 @@
|
||||||
|
{"version":3,"sources":["webpack://src/index.css","webpack://src/App.css"],"names":[],"mappings":"AAAA,KACE,QAAS,CACT,mJAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,yEAEF,CAEA,KAEE,eAAgB,CAEhB,6BAAsB,CAAtB,qBACF,CAEA,gBANE,oBAAa,CAAb,YAAa,CAEb,WAUF,CANA,WACE,UAAW,CAEX,0BAAmB,CAAnB,kBAAmB,CACnB,qCAA8B,CAA9B,6BAEF,CC3BA,KACE,iBACF,CAEA,UACE,aAAc,CACd,mBACF,CAEA,8CACE,UACE,mDAA4C,CAA5C,2CACF,CACF,CAEA,YACE,wBAAyB,CACzB,gBAAiB,CACjB,oBAAa,CAAb,YAAa,CACb,6BAAsB,CAAtB,qBAAsB,CACtB,0BAAmB,CAAnB,kBAAmB,CACnB,8BAAuB,CAAvB,sBAAuB,CACvB,4BAA6B,CAC7B,UACF,CAEA,UACE,aACF,CAEA,iCACE,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CAPA,yBACE,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CAEA,OACE,SACF,CAEA,YACE,oBAAa,CAAb,YAAa,CACb,sBAAe,CAAf,cAAe,CACf,WACF,CAEA,gBACE,WACF,CAEA,UACE,WACF,CAEA,cACE,eACF,CAEA,uBACE,kBAAmB,CACnB,UACF,CAEA,aACE,gBACF","file":"main.15b3868d.chunk.css","sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n\nform {\n display: flex;\n max-width: 500px;\n margin: auto;\n flex-direction: column;\n}\n\nform label {\n width: 100%; \n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin: auto;\n}\n\n",".App {\n text-align: center;\n}\n\n.App-logo {\n height: 40vmin;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .App-logo {\n animation: App-logo-spin infinite 20s linear;\n }\n}\n\n.App-header {\n background-color: #282c34;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.error {\n color: red;\n}\n\n.photo-wall {\n display: flex;\n flex-wrap: wrap;\n margin: 2rem;\n}\n\n.dashboard-form {\n margin: auto;\n}\n\n.ant-card {\n margin: 1rem;\n}\n\n.ant-card img {\n max-width: 250px;\n}\n\n.loading-bar-container {\n background: #282c34;\n width: 100%;\n}\n\n.loading-bar {\n background: green;\n}\n"]}
|
|
@ -1 +0,0 @@
|
||||||
{"version":3,"sources":["webpack://src/index.css","webpack://src/App.css"],"names":[],"mappings":"AAAA,KACE,QAAS,CACT,mJAEY,CACZ,kCAAmC,CACnC,iCACF,CAEA,KACE,yEAEF,CAEA,KAEE,eAAgB,CAEhB,6BAAsB,CAAtB,qBACF,CAEA,gBANE,oBAAa,CAAb,YAAa,CAEb,WAUF,CANA,WACE,UAAW,CAEX,0BAAmB,CAAnB,kBAAmB,CACnB,qCAA8B,CAA9B,6BAEF,CC3BA,KACE,iBACF,CAEA,UACE,aAAc,CACd,mBACF,CAEA,8CACE,UACE,mDAA4C,CAA5C,2CACF,CACF,CAEA,YACE,wBAAyB,CACzB,gBAAiB,CACjB,oBAAa,CAAb,YAAa,CACb,6BAAsB,CAAtB,qBAAsB,CACtB,0BAAmB,CAAnB,kBAAmB,CACnB,8BAAuB,CAAvB,sBAAuB,CACvB,4BAA6B,CAC7B,UACF,CAEA,UACE,aACF,CAEA,iCACE,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CAPA,yBACE,GACE,8BAAuB,CAAvB,sBACF,CACA,GACE,+BAAyB,CAAzB,uBACF,CACF,CAEA,OACE,SACF,CAEA,YACE,oBAAa,CAAb,YAAa,CACb,sBAAe,CAAf,cAAe,CACf,WACF,CAEA,UACE,WACF,CAEA,cACE,eACF","file":"main.df392f58.chunk.css","sourcesContent":["body {\n margin: 0;\n font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", \"Roboto\", \"Oxygen\",\n \"Ubuntu\", \"Cantarell\", \"Fira Sans\", \"Droid Sans\", \"Helvetica Neue\",\n sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\ncode {\n font-family: source-code-pro, Menlo, Monaco, Consolas, \"Courier New\",\n monospace;\n}\n\nform {\n display: flex;\n max-width: 500px;\n margin: auto;\n flex-direction: column;\n}\n\nform label {\n width: 100%; \n display: flex;\n flex-direction: row;\n justify-content: space-between;\n margin: auto;\n}\n\n",".App {\n text-align: center;\n}\n\n.App-logo {\n height: 40vmin;\n pointer-events: none;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n .App-logo {\n animation: App-logo-spin infinite 20s linear;\n }\n}\n\n.App-header {\n background-color: #282c34;\n min-height: 100vh;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n font-size: calc(10px + 2vmin);\n color: white;\n}\n\n.App-link {\n color: #61dafb;\n}\n\n@keyframes App-logo-spin {\n from {\n transform: rotate(0deg);\n }\n to {\n transform: rotate(360deg);\n }\n}\n\n.error {\n color: red;\n}\n\n.photo-wall {\n display: flex;\n flex-wrap: wrap;\n margin: 2rem;\n}\n\n.ant-card {\n margin: 1rem;\n}\n\n.ant-card img {\n max-width: 250px;\n}\n"]}
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
3
client/build/static/js/2.d35ab7cd.chunk.js
Normal file
3
client/build/static/js/2.d35ab7cd.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
client/build/static/js/2.d35ab7cd.chunk.js.map
Normal file
1
client/build/static/js/2.d35ab7cd.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
|
@ -1,2 +1,2 @@
|
||||||
(this.webpackJsonpclient=this.webpackJsonpclient||[]).push([[3],{270:function(t,n,e){"use strict";e.r(n),e.d(n,"getCLS",(function(){return v})),e.d(n,"getFCP",(function(){return y})),e.d(n,"getFID",(function(){return k})),e.d(n,"getLCP",(function(){return C})),e.d(n,"getTTFB",(function(){return P}));var i,a,r,o,c=function(t,n){return{name:t,value:void 0===n?-1:n,delta:0,entries:[],id:"v1-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},u=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},f=!1,s=function(t,n){f||"undefined"!=typeof InstallTrigger||(addEventListener("beforeunload",(function(){})),f=!0),addEventListener("visibilitychange",(function e(i){"hidden"===document.visibilityState&&(t(i),n&&removeEventListener("visibilitychange",e,!0))}),!0)},d=function(t){addEventListener("pageshow",(function(n){n.persisted&&t(n)}),!0)},m="function"==typeof WeakSet?new WeakSet:new Set,p=function(t,n,e){var i;return function(){n.value>=0&&(e||m.has(n)||"hidden"===document.visibilityState)&&(n.delta=n.value-(i||0),(n.delta||void 0===i)&&(i=n.value,t(n)))}},v=function(t,n){var e,i=c("CLS",0),a=function(t){t.hadRecentInput||(i.value+=t.value,i.entries.push(t),e())},r=u("layout-shift",a);r&&(e=p(t,i,n),s((function(){r.takeRecords().map(a),e()})),d((function(){i=c("CLS",0),e=p(t,i,n)})))},l=-1,h=function(){return"hidden"===document.visibilityState?0:1/0},S=function(){s((function(t){var n=t.timeStamp;l=n}),!0)},g=function(){return l<0&&(l=h(),S(),d((function(){setTimeout((function(){l=h(),S()}),0)}))),{get timeStamp(){return l}}},y=function(t,n){var e,i=g(),a=c("FCP"),r=u("paint",(function(t){"first-contentful-paint"===t.name&&(r&&r.disconnect(),t.startTime<i.timeStamp&&(a.value=t.startTime,a.entries.push(t),m.add(a),e()))}));r&&(e=p(t,a,n),d((function(i){a=c("FCP"),e=p(t,a,n),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,m.add(a),e()}))}))})))},w={passive:!0,capture:!0},E=new Date,L=function(t,n){i||(i=n,a=t,r=new Date,F(removeEventListener),T())},T=function(){if(a>=0&&a<r-E){var t={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+a};o.forEach((function(n){n(t)})),o=[]}},b=function(t){if(t.cancelable){var n=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,n){var e=function(){L(t,n),a()},i=function(){a()},a=function(){removeEventListener("pointerup",e,w),removeEventListener("pointercancel",i,w)};addEventListener("pointerup",e,w),addEventListener("pointercancel",i,w)}(n,t):L(n,t)}},F=function(t){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return t(n,b,w)}))},k=function(t,n){var e,r=g(),f=c("FID"),v=function(t){t.startTime<r.timeStamp&&(f.value=t.processingStart-t.startTime,f.entries.push(t),m.add(f),e())},l=u("first-input",v);e=p(t,f,n),l&&s((function(){l.takeRecords().map(v),l.disconnect()}),!0),l&&d((function(){var r;f=c("FID"),e=p(t,f,n),o=[],a=-1,i=null,F(addEventListener),r=v,o.push(r),T()}))},C=function(t,n){var e,i=g(),a=c("LCP"),r=function(t){var n=t.startTime;n<i.timeStamp&&(a.value=n,a.entries.push(t)),e()},o=u("largest-contentful-paint",r);if(o){e=p(t,a,n);var f=function(){m.has(a)||(o.takeRecords().map(r),o.disconnect(),m.add(a),e())};["keydown","click"].forEach((function(t){addEventListener(t,f,{once:!0,capture:!0})})),s(f,!0),d((function(i){a=c("LCP"),e=p(t,a,n),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,m.add(a),e()}))}))}))}},P=function(t){var n,e=c("TTFB");n=function(){try{var n=performance.getEntriesByType("navigation")[0]||function(){var t=performance.timing,n={entryType:"navigation",startTime:0};for(var e in t)"navigationStart"!==e&&"toJSON"!==e&&(n[e]=Math.max(t[e]-t.navigationStart,0));return n}();e.value=e.delta=n.responseStart,e.entries=[n],t(e)}catch(t){}},"complete"===document.readyState?setTimeout(n,0):addEventListener("pageshow",n)}}}]);
|
(this.webpackJsonpclient=this.webpackJsonpclient||[]).push([[3],{400:function(t,n,e){"use strict";e.r(n),e.d(n,"getCLS",(function(){return v})),e.d(n,"getFCP",(function(){return y})),e.d(n,"getFID",(function(){return k})),e.d(n,"getLCP",(function(){return C})),e.d(n,"getTTFB",(function(){return P}));var i,a,r,o,c=function(t,n){return{name:t,value:void 0===n?-1:n,delta:0,entries:[],id:"v1-".concat(Date.now(),"-").concat(Math.floor(8999999999999*Math.random())+1e12)}},u=function(t,n){try{if(PerformanceObserver.supportedEntryTypes.includes(t)){var e=new PerformanceObserver((function(t){return t.getEntries().map(n)}));return e.observe({type:t,buffered:!0}),e}}catch(t){}},f=!1,s=function(t,n){f||"undefined"!=typeof InstallTrigger||(addEventListener("beforeunload",(function(){})),f=!0),addEventListener("visibilitychange",(function e(i){"hidden"===document.visibilityState&&(t(i),n&&removeEventListener("visibilitychange",e,!0))}),!0)},d=function(t){addEventListener("pageshow",(function(n){n.persisted&&t(n)}),!0)},m="function"==typeof WeakSet?new WeakSet:new Set,p=function(t,n,e){var i;return function(){n.value>=0&&(e||m.has(n)||"hidden"===document.visibilityState)&&(n.delta=n.value-(i||0),(n.delta||void 0===i)&&(i=n.value,t(n)))}},v=function(t,n){var e,i=c("CLS",0),a=function(t){t.hadRecentInput||(i.value+=t.value,i.entries.push(t),e())},r=u("layout-shift",a);r&&(e=p(t,i,n),s((function(){r.takeRecords().map(a),e()})),d((function(){i=c("CLS",0),e=p(t,i,n)})))},l=-1,h=function(){return"hidden"===document.visibilityState?0:1/0},S=function(){s((function(t){var n=t.timeStamp;l=n}),!0)},g=function(){return l<0&&(l=h(),S(),d((function(){setTimeout((function(){l=h(),S()}),0)}))),{get timeStamp(){return l}}},y=function(t,n){var e,i=g(),a=c("FCP"),r=u("paint",(function(t){"first-contentful-paint"===t.name&&(r&&r.disconnect(),t.startTime<i.timeStamp&&(a.value=t.startTime,a.entries.push(t),m.add(a),e()))}));r&&(e=p(t,a,n),d((function(i){a=c("FCP"),e=p(t,a,n),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,m.add(a),e()}))}))})))},w={passive:!0,capture:!0},E=new Date,L=function(t,n){i||(i=n,a=t,r=new Date,F(removeEventListener),T())},T=function(){if(a>=0&&a<r-E){var t={entryType:"first-input",name:i.type,target:i.target,cancelable:i.cancelable,startTime:i.timeStamp,processingStart:i.timeStamp+a};o.forEach((function(n){n(t)})),o=[]}},b=function(t){if(t.cancelable){var n=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,n){var e=function(){L(t,n),a()},i=function(){a()},a=function(){removeEventListener("pointerup",e,w),removeEventListener("pointercancel",i,w)};addEventListener("pointerup",e,w),addEventListener("pointercancel",i,w)}(n,t):L(n,t)}},F=function(t){["mousedown","keydown","touchstart","pointerdown"].forEach((function(n){return t(n,b,w)}))},k=function(t,n){var e,r=g(),f=c("FID"),v=function(t){t.startTime<r.timeStamp&&(f.value=t.processingStart-t.startTime,f.entries.push(t),m.add(f),e())},l=u("first-input",v);e=p(t,f,n),l&&s((function(){l.takeRecords().map(v),l.disconnect()}),!0),l&&d((function(){var r;f=c("FID"),e=p(t,f,n),o=[],a=-1,i=null,F(addEventListener),r=v,o.push(r),T()}))},C=function(t,n){var e,i=g(),a=c("LCP"),r=function(t){var n=t.startTime;n<i.timeStamp&&(a.value=n,a.entries.push(t)),e()},o=u("largest-contentful-paint",r);if(o){e=p(t,a,n);var f=function(){m.has(a)||(o.takeRecords().map(r),o.disconnect(),m.add(a),e())};["keydown","click"].forEach((function(t){addEventListener(t,f,{once:!0,capture:!0})})),s(f,!0),d((function(i){a=c("LCP"),e=p(t,a,n),requestAnimationFrame((function(){requestAnimationFrame((function(){a.value=performance.now()-i.timeStamp,m.add(a),e()}))}))}))}},P=function(t){var n,e=c("TTFB");n=function(){try{var n=performance.getEntriesByType("navigation")[0]||function(){var t=performance.timing,n={entryType:"navigation",startTime:0};for(var e in t)"navigationStart"!==e&&"toJSON"!==e&&(n[e]=Math.max(t[e]-t.navigationStart,0));return n}();e.value=e.delta=n.responseStart,e.entries=[n],t(e)}catch(t){}},"complete"===document.readyState?setTimeout(n,0):addEventListener("pageshow",n)}}}]);
|
||||||
//# sourceMappingURL=3.2f629505.chunk.js.map
|
//# sourceMappingURL=3.fc2e2142.chunk.js.map
|
File diff suppressed because one or more lines are too long
2
client/build/static/js/main.4a4e0606.chunk.js
Normal file
2
client/build/static/js/main.4a4e0606.chunk.js
Normal file
File diff suppressed because one or more lines are too long
1
client/build/static/js/main.4a4e0606.chunk.js.map
Normal file
1
client/build/static/js/main.4a4e0606.chunk.js.map
Normal file
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -1,2 +1,2 @@
|
||||||
!function(e){function t(t){for(var n,i,a=t[0],c=t[1],l=t[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(t);p.length;)p.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,a=1;a<r.length;a++){var c=r[a];0!==o[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"2f629505"}[e]+".chunk.js"}(e);var c=new Error;u=function(t){a.onerror=a.onload=null,clearTimeout(l);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,r[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpclient=this.webpackJsonpclient||[],c=a.push.bind(a);a.push=t,a=a.slice();for(var l=0;l<a.length;l++)t(a[l]);var f=c;r()}([]);
|
!function(e){function t(t){for(var n,i,a=t[0],c=t[1],l=t[2],s=0,p=[];s<a.length;s++)i=a[s],Object.prototype.hasOwnProperty.call(o,i)&&o[i]&&p.push(o[i][0]),o[i]=0;for(n in c)Object.prototype.hasOwnProperty.call(c,n)&&(e[n]=c[n]);for(f&&f(t);p.length;)p.shift()();return u.push.apply(u,l||[]),r()}function r(){for(var e,t=0;t<u.length;t++){for(var r=u[t],n=!0,a=1;a<r.length;a++){var c=r[a];0!==o[c]&&(n=!1)}n&&(u.splice(t--,1),e=i(i.s=r[0]))}return e}var n={},o={1:0},u=[];function i(t){if(n[t])return n[t].exports;var r=n[t]={i:t,l:!1,exports:{}};return e[t].call(r.exports,r,r.exports,i),r.l=!0,r.exports}i.e=function(e){var t=[],r=o[e];if(0!==r)if(r)t.push(r[2]);else{var n=new Promise((function(t,n){r=o[e]=[t,n]}));t.push(r[2]=n);var u,a=document.createElement("script");a.charset="utf-8",a.timeout=120,i.nc&&a.setAttribute("nonce",i.nc),a.src=function(e){return i.p+"static/js/"+({}[e]||e)+"."+{3:"fc2e2142"}[e]+".chunk.js"}(e);var c=new Error;u=function(t){a.onerror=a.onload=null,clearTimeout(l);var r=o[e];if(0!==r){if(r){var n=t&&("load"===t.type?"missing":t.type),u=t&&t.target&&t.target.src;c.message="Loading chunk "+e+" failed.\n("+n+": "+u+")",c.name="ChunkLoadError",c.type=n,c.request=u,r[1](c)}o[e]=void 0}};var l=setTimeout((function(){u({type:"timeout",target:a})}),12e4);a.onerror=a.onload=u,document.head.appendChild(a)}return Promise.all(t)},i.m=e,i.c=n,i.d=function(e,t,r){i.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},i.r=function(e){"undefined"!==typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.t=function(e,t){if(1&t&&(e=i(e)),8&t)return e;if(4&t&&"object"===typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(i.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var n in e)i.d(r,n,function(t){return e[t]}.bind(null,n));return r},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="/",i.oe=function(e){throw console.error(e),e};var a=this.webpackJsonpclient=this.webpackJsonpclient||[],c=a.push.bind(a);a.push=t,a=a.slice();for(var l=0;l<a.length;l++)t(a[l]);var f=c;r()}([]);
|
||||||
//# sourceMappingURL=runtime-main.3a03ddd0.js.map
|
//# sourceMappingURL=runtime-main.e5089e68.js.map
|
File diff suppressed because one or more lines are too long
|
@ -47,6 +47,10 @@
|
||||||
margin: 2rem;
|
margin: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.dashboard-form {
|
||||||
|
margin: auto;
|
||||||
|
}
|
||||||
|
|
||||||
.ant-card {
|
.ant-card {
|
||||||
margin: 1rem;
|
margin: 1rem;
|
||||||
}
|
}
|
||||||
|
@ -54,3 +58,12 @@
|
||||||
.ant-card img {
|
.ant-card img {
|
||||||
max-width: 250px;
|
max-width: 250px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.loading-bar-container {
|
||||||
|
background: #282c34;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
.loading-bar {
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
|
|
@ -1,23 +1,42 @@
|
||||||
import { Client } from '../types'
|
import { Client } from '../types'
|
||||||
import axios from 'axios'
|
import axios from 'axios'
|
||||||
|
import { message } from 'antd'
|
||||||
|
import { Status } from '../components/StatusChip'
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'development') {
|
const dev = process.env.NODE_ENV === 'development'
|
||||||
|
|
||||||
|
if (dev) {
|
||||||
const host = 'http://192.168.1.107:5000'
|
const host = 'http://192.168.1.107:5000'
|
||||||
axios.defaults.baseURL = host
|
axios.defaults.baseURL = host
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const mock = false
|
||||||
|
|
||||||
export const createClient = async (body: Omit<Client, 'has_photos'>) => {
|
export const createClient = async (body: Omit<Client, 'has_photos'>) => {
|
||||||
|
if (mock) return 'test'
|
||||||
const res = await axios.post<{ client_id: string }>(`/api/clients`, body)
|
const res = await axios.post<{ client_id: string }>(`/api/clients`, body)
|
||||||
return res.data.client_id
|
return res.data.client_id
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getClient = async (id: string): Promise<Client> => {
|
export const getClient = async (id: string): Promise<Client> => {
|
||||||
|
if (mock)
|
||||||
|
return {
|
||||||
|
name: 'Test Client',
|
||||||
|
has_photos: false,
|
||||||
|
email: 'test@test.test',
|
||||||
|
phone: 1234567890,
|
||||||
|
}
|
||||||
const res = await axios.get<Client>(`/api/clients/${id}`)
|
const res = await axios.get<Client>(`/api/clients/${id}`)
|
||||||
return res.data
|
return res.data
|
||||||
}
|
}
|
||||||
export const startSession = async (clientId: string) => {
|
export const startSession = async (clientId: string) => {
|
||||||
|
try {
|
||||||
const res = await axios.post(`/api/clients/${clientId}/session`)
|
const res = await axios.post(`/api/clients/${clientId}/session`)
|
||||||
return res.data // session data
|
return res.data
|
||||||
|
} catch (err) {
|
||||||
|
message.error('Something went wrong, check connection with the machine')
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export const getSession = async (clientId: string) => {
|
export const getSession = async (clientId: string) => {
|
||||||
|
@ -38,6 +57,11 @@ export const restartSession = async (clientId: string) => {
|
||||||
|
|
||||||
// TOOD: Get status
|
// TOOD: Get status
|
||||||
|
|
||||||
|
export const getStatus = async (): Promise<Status> => {
|
||||||
|
const res = await axios.get<{ status: Status }>('/api/status')
|
||||||
|
return res.data.status
|
||||||
|
}
|
||||||
|
|
||||||
// Someday
|
// Someday
|
||||||
|
|
||||||
export const getClients = async (): Promise<Client[]> => {
|
export const getClients = async (): Promise<Client[]> => {
|
||||||
|
|
|
@ -11,16 +11,9 @@ export const SessionPictures = ({ clientId }: Props) => {
|
||||||
const [activeUrl, setActiveUrl] = useState<string | null>(null)
|
const [activeUrl, setActiveUrl] = useState<string | null>(null)
|
||||||
const [loading, setLoading] = useState(true)
|
const [loading, setLoading] = useState(true)
|
||||||
|
|
||||||
const handleSync = async () => {
|
|
||||||
message.info('Syncing photos...')
|
|
||||||
const { photos } = await getSession(clientId)
|
|
||||||
if (photos.length) setUrls(photos)
|
|
||||||
}
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const get = async () => {
|
const get = async () => {
|
||||||
if (urls && urls.length >= 89 * 2) {
|
if (urls && urls.length >= 89 * 1) {
|
||||||
setLoading(false)
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,23 +46,25 @@ export const SessionPictures = ({ clientId }: Props) => {
|
||||||
width="100%"
|
width="100%"
|
||||||
onClick={closeModal}
|
onClick={closeModal}
|
||||||
src={`${host}/output/${clientId}/${activeUrl}`}
|
src={`${host}/output/${clientId}/${activeUrl}`}
|
||||||
alt="large image"
|
alt="large modal"
|
||||||
></img>
|
></img>
|
||||||
</Modal>
|
</Modal>
|
||||||
<PageHeader
|
<PageHeader
|
||||||
title="Session Pictures"
|
title="Session Pictures"
|
||||||
subTitle={`${urls.length}/${89 * 2} loaded`}
|
subTitle={`${urls.length}/${89 * 1} loaded`}
|
||||||
></PageHeader>
|
>
|
||||||
|
<div className="loading-bar-container">
|
||||||
|
<div className="loading-bar"></div>
|
||||||
|
</div>
|
||||||
|
</PageHeader>
|
||||||
<div className="photo-wall">
|
<div className="photo-wall">
|
||||||
{urls ? (
|
{urls ? (
|
||||||
urls
|
urls
|
||||||
.sort((a, b) => a.split('_')[0].localeCompare(b.split('_')[0]))
|
.sort((a, b) => a.split('_')[0].localeCompare(b.split('_')[0]))
|
||||||
.map((src) => (
|
.map((src) => (
|
||||||
<Card className="photo" title={src.split('_')[0]}>
|
<Card key={src} className="photo" title={src.split('_')[0]}>
|
||||||
<img
|
<img
|
||||||
onClick={() => setActiveUrl(src)}
|
onClick={() => setActiveUrl(src)}
|
||||||
key={src}
|
|
||||||
id={src}
|
|
||||||
src={`${host}/output/${clientId}/${src}`}
|
src={`${host}/output/${clientId}/${src}`}
|
||||||
alt="lol"
|
alt="lol"
|
||||||
/>
|
/>
|
47
client/src/components/StatusChip.tsx
Normal file
47
client/src/components/StatusChip.tsx
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
import { Tag } from 'antd'
|
||||||
|
import { PresetColorType } from 'antd/lib/_util/colors'
|
||||||
|
import { useEffect, useState } from 'react'
|
||||||
|
import { getStatus } from '../api'
|
||||||
|
|
||||||
|
export enum Status {
|
||||||
|
'Standing By...',
|
||||||
|
'Warming Up...',
|
||||||
|
'Capturing Photo',
|
||||||
|
'Capturing Grid',
|
||||||
|
'Writing To Disk',
|
||||||
|
'Downloading!',
|
||||||
|
}
|
||||||
|
|
||||||
|
const colors: Partial<PresetColorType>[] = [
|
||||||
|
'lime',
|
||||||
|
'gold',
|
||||||
|
'volcano',
|
||||||
|
'magenta',
|
||||||
|
'geekblue',
|
||||||
|
]
|
||||||
|
|
||||||
|
type Props = {
|
||||||
|
poll: boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
export const StatusChip = ({ poll }: Props) => {
|
||||||
|
const [status, setStatus] = useState<Status>(Status['Standing By...'])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const get = async () => {
|
||||||
|
if (!poll) return
|
||||||
|
const status = await getStatus()
|
||||||
|
setStatus(status)
|
||||||
|
}
|
||||||
|
|
||||||
|
const interval = setInterval(get, 1000 / 4)
|
||||||
|
|
||||||
|
return () => clearInterval(interval)
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Tag color={colors[status]} style={{ display: 'flex' }}>
|
||||||
|
<span style={{ margin: 'auto' }}>{Status[status]}</span>
|
||||||
|
</Tag>
|
||||||
|
)
|
||||||
|
}
|
|
@ -1,4 +1,6 @@
|
||||||
import { Button, Divider, message, PageHeader } from 'antd'
|
import { Button, Divider, Form, Input, message, PageHeader, Row } from 'antd'
|
||||||
|
import FormItem from 'antd/lib/form/FormItem'
|
||||||
|
import { Store } from 'antd/lib/form/interface'
|
||||||
import { Content } from 'antd/lib/layout/layout'
|
import { Content } from 'antd/lib/layout/layout'
|
||||||
import React, { FormEvent } from 'react'
|
import React, { FormEvent } from 'react'
|
||||||
import { useState } from 'react'
|
import { useState } from 'react'
|
||||||
|
@ -8,21 +10,11 @@ import { createClient } from '../api'
|
||||||
export const Dashboard = () => {
|
export const Dashboard = () => {
|
||||||
const history = useHistory()
|
const history = useHistory()
|
||||||
const [error, setError] = useState<string | null>(null)
|
const [error, setError] = useState<string | null>(null)
|
||||||
const [name, setName] = useState('')
|
|
||||||
const [email, setEmail] = useState('')
|
|
||||||
const [phone, setPhone] = useState('')
|
|
||||||
|
|
||||||
const handleReset = () => {
|
const handleReset = () => {}
|
||||||
//
|
|
||||||
setName('')
|
|
||||||
setEmail('')
|
|
||||||
setPhone('')
|
|
||||||
}
|
|
||||||
|
|
||||||
const handleSubmit = async (e: FormEvent) => {
|
const handleSubmit = async (values: Store) => {
|
||||||
e.preventDefault()
|
if (values.phone.length < 10) {
|
||||||
|
|
||||||
if (phone.length < 10) {
|
|
||||||
// helpful message
|
// helpful message
|
||||||
message.error('Check all fields!')
|
message.error('Check all fields!')
|
||||||
setError('Phone number needs to be a length of at least 10')
|
setError('Phone number needs to be a length of at least 10')
|
||||||
|
@ -30,9 +22,9 @@ export const Dashboard = () => {
|
||||||
}
|
}
|
||||||
|
|
||||||
const client_id = await createClient({
|
const client_id = await createClient({
|
||||||
name,
|
name: values.name,
|
||||||
email,
|
email: values.email,
|
||||||
phone: parseInt(phone),
|
phone: parseInt(values.phone.replace(/\D/g, '')),
|
||||||
})
|
})
|
||||||
|
|
||||||
history.push(`/sessions/${client_id}`)
|
history.push(`/sessions/${client_id}`)
|
||||||
|
@ -45,42 +37,31 @@ export const Dashboard = () => {
|
||||||
subTitle="Enter the name, email and phone number of the subject"
|
subTitle="Enter the name, email and phone number of the subject"
|
||||||
></PageHeader>
|
></PageHeader>
|
||||||
<Divider />
|
<Divider />
|
||||||
<form onSubmit={handleSubmit}>
|
<Form
|
||||||
<label htmlFor="name">
|
className="dashboard-form"
|
||||||
Name:
|
onFinish={handleSubmit}
|
||||||
<input
|
labelCol={{ span: 8 }}
|
||||||
minLength={3}
|
wrapperCol={{ span: 16 }}
|
||||||
value={name}
|
>
|
||||||
onChange={(e) => setName(e.target.value)}
|
<FormItem label="name" name="name">
|
||||||
name="name"
|
<Input minLength={3} />
|
||||||
/>
|
</FormItem>
|
||||||
</label>
|
<FormItem label="email" name="email">
|
||||||
<label htmlFor="email">
|
<Input type="email" />
|
||||||
Email:
|
</FormItem>
|
||||||
<input
|
<FormItem label="phone" name="phone">
|
||||||
value={email}
|
<Input type="tel" minLength={10} />
|
||||||
onChange={(e) => setEmail(e.target.value)}
|
</FormItem>
|
||||||
type="email"
|
<Row justify="space-between">
|
||||||
name="email"
|
|
||||||
/>
|
|
||||||
</label>
|
|
||||||
<label htmlFor="phone">
|
|
||||||
Phone:
|
|
||||||
<input
|
|
||||||
value={phone}
|
|
||||||
onChange={(e) => setPhone(e.target.value)}
|
|
||||||
type="tel"
|
|
||||||
name="phone"
|
|
||||||
/>
|
|
||||||
</label>
|
|
||||||
<Button danger onClick={handleReset}>
|
<Button danger onClick={handleReset}>
|
||||||
Reset
|
Reset
|
||||||
</Button>
|
</Button>
|
||||||
<Button htmlType="submit" type="primary">
|
<Button htmlType="submit" type="primary">
|
||||||
Start Session
|
Start Session
|
||||||
</Button>
|
</Button>
|
||||||
|
</Row>
|
||||||
{error && <p className="error">{error}</p>}
|
{error && <p className="error">{error}</p>}
|
||||||
</form>
|
</Form>
|
||||||
</Content>
|
</Content>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,10 @@
|
||||||
import React, { useEffect, useState } from 'react'
|
import React, { useEffect, useState } from 'react'
|
||||||
import { RouteComponentProps, useHistory } from 'react-router-dom'
|
import { RouteComponentProps, useHistory } from 'react-router-dom'
|
||||||
import { getClient, killSession, restartSession, startSession } from '../api'
|
import { getClient, killSession, restartSession, startSession } from '../api'
|
||||||
import { SessionPictures } from './SessionPictures'
|
import { SessionPictures } from '../components/SessionPictures'
|
||||||
import {
|
import { StatusChip } from '../components/StatusChip'
|
||||||
Button,
|
|
||||||
Divider,
|
import { Button, Divider, message, Popconfirm, Row, Typography } from 'antd'
|
||||||
message,
|
|
||||||
PageHeader,
|
|
||||||
Popconfirm,
|
|
||||||
Row,
|
|
||||||
Tag,
|
|
||||||
} from 'antd'
|
|
||||||
import { Content } from 'antd/lib/layout/layout'
|
import { Content } from 'antd/lib/layout/layout'
|
||||||
import { Client } from '../types'
|
import { Client } from '../types'
|
||||||
|
|
||||||
|
@ -59,13 +53,21 @@ export const Session = (props: Props) => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Content>
|
<Content>
|
||||||
<PageHeader
|
<Row justify="center">
|
||||||
ghost={false}
|
<Typography.Title>Client: {client?.name}</Typography.Title>
|
||||||
onBack={() => history.goBack()}
|
</Row>
|
||||||
title={`Session for ${clientId}`}
|
|
||||||
tags={active ? <Tag color="lime">Active</Tag> : <Tag>Inactive</Tag>}
|
<Row justify="space-around" style={{ width: '60%', margin: 'auto' }}>
|
||||||
subTitle={`session has ${active ? 'started' : 'not started'}`}
|
<Typography.Text>
|
||||||
extra={[
|
<strong>email:</strong> {client?.email}
|
||||||
|
</Typography.Text>
|
||||||
|
<Typography.Text>
|
||||||
|
<strong>phone:</strong> {client?.phone}
|
||||||
|
</Typography.Text>
|
||||||
|
</Row>
|
||||||
|
<Divider />
|
||||||
|
|
||||||
|
<Row justify="center" className="session-header">
|
||||||
<Button
|
<Button
|
||||||
key="startsession"
|
key="startsession"
|
||||||
disabled={active}
|
disabled={active}
|
||||||
|
@ -73,8 +75,9 @@ export const Session = (props: Props) => {
|
||||||
onClick={handleStartSession}
|
onClick={handleStartSession}
|
||||||
>
|
>
|
||||||
Capture
|
Capture
|
||||||
</Button>,
|
</Button>
|
||||||
<Popconfirm
|
<Popconfirm
|
||||||
|
disabled={!active}
|
||||||
key="retry"
|
key="retry"
|
||||||
title="Re-capture set?"
|
title="Re-capture set?"
|
||||||
onConfirm={handleRestartSession}
|
onConfirm={handleRestartSession}
|
||||||
|
@ -82,16 +85,17 @@ export const Session = (props: Props) => {
|
||||||
<Button type="default" disabled={!active}>
|
<Button type="default" disabled={!active}>
|
||||||
Retry Capture
|
Retry Capture
|
||||||
</Button>
|
</Button>
|
||||||
</Popconfirm>,
|
</Popconfirm>
|
||||||
<Popconfirm
|
<Popconfirm
|
||||||
key="nuke"
|
key="nuke"
|
||||||
|
disabled={!active}
|
||||||
title="Delete all photos and return to dashboard?"
|
title="Delete all photos and return to dashboard?"
|
||||||
onConfirm={handleNuke}
|
onConfirm={handleNuke}
|
||||||
>
|
>
|
||||||
<Button danger disabled={!active}>
|
<Button danger disabled={!active}>
|
||||||
Abort Session
|
Abort Session
|
||||||
</Button>
|
</Button>
|
||||||
</Popconfirm>,
|
</Popconfirm>
|
||||||
<Button
|
<Button
|
||||||
key="finish"
|
key="finish"
|
||||||
ghost
|
ghost
|
||||||
|
@ -100,9 +104,10 @@ export const Session = (props: Props) => {
|
||||||
onClick={handleExit}
|
onClick={handleExit}
|
||||||
>
|
>
|
||||||
Finish Session
|
Finish Session
|
||||||
</Button>,
|
</Button>
|
||||||
]}
|
<StatusChip poll={true} />
|
||||||
></PageHeader>
|
</Row>
|
||||||
|
|
||||||
<Divider />
|
<Divider />
|
||||||
<Row className="controls">
|
<Row className="controls">
|
||||||
{active && <SessionPictures clientId={clientId} />}
|
{active && <SessionPictures clientId={clientId} />}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user