{"version":3,"sources":["services/api.js","assets/previewImage.png","components/SearchInputField.js","helpers.js","components/scan.js","pages/Home.js","assets/logo.png","components/SelectMenu.js","useToken.js","useLocalStorage.js","pages/Login.js","components/Header.js","components/CardImage.js","components/CommentBox.js","components/DataDisplay.js","components/Loading.js","pages/AssetDisplay.js","components/NotFound.js","components/HistoryDisplay.js","App.js","serviceWorker.js","reportWebVitals.js","index.js"],"names":["window","config","apiUrl","adminToken","checkUserTenant","credentials","axios","username","method","headers","data","status","toast","error","position","autoClose","hideProgressBar","closeOnClick","pauseOnHover","draggable","progress","undefined","loginUser","Tenant","newCredentials","Email","Language","Password","password","UserName","post","JSON","stringify","then","response","catch","UserMessage","logout","token","sessionStorage","getItem","Authorization","removeItem","getAssetLocationList","get","txtSearch","uriQueryString","Limit","Page","Exclude","WhereGroupList","AndOr","ConditionList","Field","Operator","Value","Data","map","value","RegId","name","Name","photo","AstPhoto","barcode","Barcode","getAssetByRegId","getAssetByBarcode","WhereLike","WhereLikeFields","updateAssetRegDetail","param","put","addComment","getComment","id","getCommentById","downloadCommentById","responseType","withRouter","props","useState","setParam","onSubmit","e","preventDefault","history","push","className","SelectSearch","options","getOptions","query","getAssetList","renderOption","option","snapshot","imgStyle","display","borderRadius","verticalAlign","marginRight","type","alt","style","width","height","src","PreviewImage","search","onChange","placeholder","emptyMessage","beep","freq","duration","vol","context","audioContext","oscillator","createOscillator","gain","createGain","connect","frequency","destination","start","currentTime","stop","console","warn","toString","CODE_TYPE","BTN_TXT","CANVAS_SIZE","sw","sh","dw","dh","sx","sy","fps","Scan","log","initWorker","qrworker","Worker","state","worker","onmessage","ev","terminate","result","stopScan","res","milliseconds","ms","rawCode","codeType","setState","startScan","fpsTimestamp","Date","scanning","btnText","resultOpen","transformToggle","navigator","mediaDevices","getUserMedia","audio","video","facingMode","stream","srcObject","setAttribute","play","requestAnimationFrame","tick","err","videoError","initializeAudio","AudioContext","webkitAudioContext","fixAudioContext","buffer","createBuffer","source","createBufferSource","noteOn","document","removeEventListener","addEventListener","boxShadow","pause","getVideoTracks","forEach","track","time","readyState","HAVE_ENOUGH_DATA","fpsOn","canvas","drawImage","bw","monochromize","crosshair","drawCrosshair","drawFPS","decodeQR","recogniseQRcode","imgd","getImageData","canvasElement","pix","i","length","gray","putImageData","fillStyle","shape","Path2D","fill","imageData","oldTime","scanRate","postMessage","font","fillText","Math","round","onBtnClickHandler","onBtnOpenSearchHandler","showSearch","onCrossHairClickHandler","onFPSClickHandler","onBWClickHandler","onBeepClickHandler","startStyle","textAlign","backgroundColor","fpsStyle","xHairStyle","bwStyle","beepStyle","transformToggleStyle","padding","renderScan","renderCanvas","href","onClick","renderCopyToClipboardBtn","onClickCopyToClipboard","clipboard","writeText","btnId","getElementById","innerText","setTimeout","createElement","onplaying","videoWidth","videoHeight","decode","this","getContext","role","React","Component","defaultProps","Home","classNames","classes","filter","Boolean","join","SelectMenu","title","keyName","keyDesc","list","selectDefault","setSelectDefault","newValue","open","Label","Button","SelectorIcon","show","as","Fragment","leave","leaveFrom","leaveTo","Options","item","idx","Option","active","selected","CheckIcon","useToken","setToken","userToken","setItem","clearToken","localStorage","clear","useLocalStorage","userName","tenant","ls","setLs","formReducer","event","useReducer","formData","setFormData","submitting","setSubmitting","tenantDefault","setTenantDefault","tenantList","setTenantList","useEffect","isMounted","handleSubmit","user","AccessToken","pathname","handleChange","target","handleBlur","defaultTenant","IsDefault","logo","onBlur","autoFocus","disabled","handleLogout","to","xmlns","viewBox","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","CardImage","base64Src","CommentBox","isLoading","setIsLoading","commentList","setCommentList","message","setMessage","fetchComment","element","date","LastModified","stringDate","getDate","getMonth","getFullYear","enterSendComment","key","shiftKey","Module","ModuleId","Message","UserModified","sendComment","Downloadlink","b64toBlob","b64Data","contentType","sliceSize","byteCharacters","atob","byteArrays","offset","slice","byteNumbers","Array","charCodeAt","byteArray","Uint8Array","blob","Blob","clickFile","file","FileExtension","r","File","FileInfo","blobUrl","URL","createObjectURL","focus","msSaveOrOpenBlob","FileName","a","body","appendChild","url","download","click","revokeObjectURL","removeChild","cursor","textDecoration","Id","htmlFor","accept","reader","FileReader","onloadend","base64String","replace","files","readAsDataURL","attachFile","webkitdirectory","mozdirectory","directory","flex","onKeyPress","onKeyUp","txt","cols","arraytxt","split","rows","parseInt","do_resize","customStyles","content","inset","code","loadingBtn","locationList","UploadImg","UpdateData","SaveData","showUpload","setShowUpload","showComment","setShowComment","Modal","setAppElement","No","CategoryCode","AstCateDesc","InputDate","format","AcquireDate","Qty","UnitCode","objLoc","TransferDate","SerialNo","Spec","Remark","cx","cy","isOpen","onRequestClose","shouldCloseOnOverlayClick","querySelector","classList","toggle","Loading","setIsLoadingBtn","useStateWithCallbackLazy","setData","setLocationList","oldData","setOldData","onInfoFetched","useCallback","barcodeOrRegId","searchType","mounted","find","LocCode","LocationCode","Code","success","params","URLSearchParams","location","match","prevState","nextState","NotFound","HistoryDisplay","App","useHistory","PrivateRoute","children","rest","render","from","exact","path","component","Login","AssetDisplay","isLocalhost","hostname","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","basename","process","origin","fetch","indexOf","ready","unregister","reload","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.97870d19.chunk.js","sourcesContent":["import axios from \"axios\";\r\nimport { toast } from \"react-toastify\";\r\n\r\nconst { apiUrl, adminToken } = window.config;\r\n\r\n// axios.headers.common['Authorization'] = `Bearer ${access_token}`\r\n\r\nexport async function checkUserTenant(credentials) {\r\n const { data, status } = await axios(`${apiUrl}/api/userTenant/tenantListIn/${adminToken}/${credentials.username}`, {\r\n method: \"GET\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n });\r\n\r\n if (status === 204) {\r\n toast.error(`🚫 No username found`, {\r\n position: \"bottom-center\",\r\n autoClose: 2000,\r\n hideProgressBar: true,\r\n closeOnClick: true,\r\n pauseOnHover: false,\r\n draggable: true,\r\n progress: undefined,\r\n });\r\n }\r\n return data;\r\n}\r\n\r\nexport async function loginUser(credentials, { Tenant }) {\r\n let newCredentials = {\r\n Email: \"string\",\r\n Language: \"string\",\r\n Tenant: Tenant,\r\n Password: credentials.password,\r\n UserName: credentials.username,\r\n };\r\n const { data, status } = await axios\r\n .post(`${apiUrl}/api/login?adminToken=${adminToken}`, JSON.stringify(newCredentials), {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n },\r\n })\r\n .then((response) => {\r\n return response;\r\n })\r\n .catch((error) => {\r\n return error.response;\r\n });\r\n\r\n // const { data, status } = r;\r\n\r\n if (status === 204) {\r\n toast.error(`🚫 No username found`, {\r\n position: \"bottom-center\",\r\n autoClose: 2000,\r\n hideProgressBar: true,\r\n closeOnClick: true,\r\n pauseOnHover: false,\r\n draggable: true,\r\n progress: undefined,\r\n });\r\n return;\r\n }\r\n if (status === 401) {\r\n toast.error(`🚫 ${data.UserMessage}`, {\r\n position: \"bottom-center\",\r\n autoClose: 5000,\r\n hideProgressBar: true,\r\n closeOnClick: true,\r\n pauseOnHover: false,\r\n draggable: true,\r\n progress: undefined,\r\n });\r\n return;\r\n }\r\n return data;\r\n}\r\n\r\nexport async function logout() {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n await axios(`${apiUrl}/api/logout`, {\r\n method: \"DELETE\",\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n return sessionStorage.removeItem(\"AccessToken\");\r\n}\r\n\r\nexport async function getAssetLocationList() {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n try {\r\n const { data } = await axios.get(`${apiUrl}/api/assetLocation`, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n return data;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport async function getAssetList(txtSearch) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n let uriQueryString = {\r\n Limit: 15,\r\n Page: 1,\r\n Exclude: [\r\n \"Spec\",\r\n \"SerialNo\",\r\n \"CurRate\",\r\n \"Qty\",\r\n \"Salvage\",\r\n \"InitAccu\",\r\n \"TotalCost\",\r\n \"Life\",\r\n \"LifeType\",\r\n \"RemainDay\",\r\n \"RemainNet\",\r\n \"RemainTotalCost\",\r\n \"DimList\",\r\n \"RemainInfo\",\r\n ],\r\n WhereGroupList: [\r\n {\r\n AndOr: \"And\",\r\n ConditionList: [\r\n {\r\n AndOr: \"Or\",\r\n Field: \"AstId\",\r\n Operator: \"Like\",\r\n Value: `%${txtSearch}%`,\r\n },\r\n {\r\n AndOr: \"Or\",\r\n Field: \"AstName\",\r\n Operator: \"Like\",\r\n Value: `%${txtSearch}%`,\r\n },\r\n ],\r\n },\r\n ],\r\n };\r\n\r\n const { data } = await axios.post(`${apiUrl}/api/assetRegister/search`, uriQueryString, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n\r\n return data.Data.map(({ RegId, Name, AstPhoto, Barcode }) => ({\r\n value: RegId,\r\n name: Name,\r\n photo: AstPhoto,\r\n barcode: Barcode,\r\n }));\r\n}\r\n\r\nexport async function getAssetByRegId(RegId) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n try {\r\n const { data } = await axios.get(`${apiUrl}/api/assetRegister/${RegId}`, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n return data;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport async function getAssetByBarcode(barcode) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n let uriQueryString = {\r\n Limit: 1,\r\n WhereLike: `%${barcode}%`,\r\n WhereLikeFields: [\"AstId\", \"AstName\", \"Astbarcode\"],\r\n // WhereGroupList: [\r\n // {\r\n // AndOr: \"And\",\r\n // ConditionList: [\r\n // {\r\n // AndOr: \"And\",\r\n // Field: \"AstBarCode\",\r\n // Operator: \"=\",\r\n // Value: barcode,\r\n // },\r\n // ],\r\n // },\r\n // ],\r\n };\r\n\r\n const { data } = await axios.post(`${apiUrl}/api/assetRegister/search`, uriQueryString, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n return data;\r\n}\r\n\r\nexport async function updateAssetRegDetail(param) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n const { data } = await axios.put(`${apiUrl}/api/assetRegister/${param.RegId}`, param, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n return data;\r\n}\r\n\r\nexport async function addComment(param) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n const { data } = await axios.post(`${apiUrl}/api/comment/`, param, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n return data;\r\n}\r\n\r\nexport async function getComment(id) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n const { data } = await axios.get(`${apiUrl}/api/comment/AST_Reg/${id}`, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n return data;\r\n}\r\n\r\nexport async function getCommentById(id) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n const { data } = await axios.get(`${apiUrl}/api/comment/${id}`, {\r\n headers: {\r\n \"Content-Type\": \"application/json\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n },\r\n });\r\n return data;\r\n}\r\n\r\nexport async function downloadCommentById(id) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n const { data } = await axios.get(`/api/comment/download/${id}`, {\r\n headers: {\r\n \"content-Type\": \"application/octet-stream\",\r\n Authorization: token ? `Bearer ${token}` : \"\",\r\n responseType: \"blob\",\r\n },\r\n });\r\n return data;\r\n}\r\n","export default \"data:image/png;base64,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\"","import React, { useState } from \"react\";\r\nimport SelectSearch from \"react-select-search\";\r\nimport { getAssetList } from \"../services/api\";\r\nimport PreviewImage from \"../assets/previewImage.png\";\r\nimport { withRouter } from \"react-router\";\r\n\r\nconst SearchInputField = (props) => {\r\n const [param, setParam] = useState(null);\r\n\r\n const onSubmit = (e) => {\r\n e.preventDefault();\r\n //get param & find in api when search\r\n props.history.push(`/asset/${param}?regId=true`);\r\n };\r\n\r\n // const onInputChange = (e) => {\r\n // setParam(e.target.value);\r\n // };\r\n\r\n function renderAsset(props, option, snapshot, className) {\r\n const imgStyle = {\r\n display: \"inline\",\r\n borderRadius: \"50%\",\r\n verticalAlign: \"center\",\r\n marginRight: 10,\r\n };\r\n return (\r\n \r\n );\r\n }\r\n\r\n return (\r\n
\r\n {/* */}\r\n {\r\n return getAssetList(query);\r\n }}\r\n renderOption={renderAsset}\r\n search\r\n value={param}\r\n onChange={setParam}\r\n placeholder=\"e.g. 8855459007801\"\r\n emptyMessage=\"Not found\"\r\n />\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default withRouter(SearchInputField);\r\n","const beep = (freq = 750, duration = 150, vol = 5) => {\r\n try {\r\n const context = window.audioContext;\r\n const oscillator = context.createOscillator();\r\n const gain = context.createGain();\r\n oscillator.connect(gain);\r\n oscillator.frequency.value = freq;\r\n oscillator.type = \"square\";\r\n gain.connect(context.destination);\r\n gain.gain.value = vol * 0.01;\r\n oscillator.start(context.currentTime);\r\n oscillator.stop(context.currentTime + duration * 0.001);\r\n } catch (e) {\r\n console.warn(\"Sorry, Web Audio API is not supported by your browser\");\r\n console.warn(e.toString());\r\n }\r\n};\r\n\r\nconst WORKER_TYPE = {\r\n WASM: \"wasm\",\r\n JS_QR: \"jsQr\"\r\n};\r\n\r\nexport {beep, WORKER_TYPE};","import React from \"react\";\r\nimport SearchInputField from \"./SearchInputField\";\r\nimport PropTypes from \"prop-types\";\r\nimport { beep, WORKER_TYPE } from \"../helpers\";\r\nimport { withRouter } from \"react-router-dom\";\r\n//import \"../scan.css\";\r\n\r\nconst CODE_TYPE = {\r\n RAW: \"RAW\",\r\n};\r\n\r\nconst BTN_TXT = {\r\n START: \"START\",\r\n STOP: \"STOP\",\r\n AGAIN: \"START AGAIN\",\r\n};\r\n\r\nconst CANVAS_SIZE = {\r\n WIDTH: 320,\r\n HEIGHT: 430,\r\n};\r\n\r\nconst sw = CANVAS_SIZE.WIDTH;\r\nconst sh = CANVAS_SIZE.HEIGHT;\r\nconst dw = sw;\r\nconst dh = sh;\r\nconst dx = 0;\r\nconst dy = 0;\r\nlet sx = 0;\r\nlet sy = 0;\r\n\r\nlet fps = 0;\r\n\r\nconst crossHairSvg =\r\n \"M77.125 148.02567c0-3.5774 2.73862-6.27567 6.37076-6.27567H119V117H84.0192C66.50812 117 52 130.77595 52 148.02567V183h25.125v-34.97433zM237.37338 117H202v24.75h35.18494c3.63161 0 6.69006 2.69775 6.69006 6.27567V183H269v-34.97433C269 130.77595 254.88446 117 237.37338 117zM243.875 285.4587c0 3.5774-2.73863 6.27567-6.37076 6.27567H202V317h35.50424C255.01532 317 269 302.70842 269 285.4587V251h-25.125v34.4587zM83.49576 291.73438c-3.63213 0-6.37076-2.69776-6.37076-6.27568V251H52v34.4587C52 302.70842 66.50812 317 84.0192 317H119v-25.26563H83.49576z\";\r\nconst crossHairWidth = 217,\r\n crossHairHeight = 200,\r\n x0 = 53,\r\n y0 = 117;\r\n\r\nclass Scan extends React.Component {\r\n constructor(props) {\r\n console.log(props);\r\n super(props);\r\n this.video = document.createElement(\"video\");\r\n this.video.onplaying = () => {\r\n sx = (this.video.videoWidth - CANVAS_SIZE.WIDTH) / 2;\r\n sy = (this.video.videoHeight - CANVAS_SIZE.HEIGHT) / 2;\r\n };\r\n this.state = {\r\n showSearch: false,\r\n btnText: BTN_TXT.START,\r\n videoError: undefined,\r\n scanning: false,\r\n fpsOn: this.props.fps,\r\n bw: this.props.bw,\r\n crosshair: this.props.crosshair,\r\n resultOpen: false,\r\n worker: this.props.worker,\r\n transformToggle: true,\r\n rawCode: \"\",\r\n codeType: CODE_TYPE.RAW,\r\n beep: this.props.beep,\r\n };\r\n\r\n this.decodeQR = this.props.decode;\r\n this.scanRate = this.props.scanRate;\r\n this.qrworker = null;\r\n this.oldTime = 0;\r\n }\r\n\r\n initWorker = () => {\r\n this.qrworker = new Worker(this.state.worker + \"Worker.js\");\r\n\r\n this.qrworker.onmessage = async (ev) => {\r\n if (ev.data != null) {\r\n this.qrworker.terminate();\r\n const result = ev.data;\r\n this.stopScan();\r\n\r\n let res = result.data;\r\n const milliseconds = ev.data.ms;\r\n const rawCode = res;\r\n let codeType = CODE_TYPE.RAW;\r\n this.setState({ barcode: res, rawCode, codeType, milliseconds });\r\n if (this.state.beep) beep();\r\n this.props.history.push(`/asset/${res}`);\r\n }\r\n };\r\n };\r\n\r\n startScan = () => {\r\n this.initWorker();\r\n this.fpsTimestamp = new Date();\r\n\r\n this.setState({\r\n scanning: true,\r\n btnText: BTN_TXT.STOP,\r\n barcode: \"\",\r\n resultOpen: false,\r\n transformToggle: true,\r\n rawCode: \"\",\r\n codeType: CODE_TYPE.RAW,\r\n });\r\n\r\n navigator.mediaDevices\r\n .getUserMedia({ audio: false, video: { facingMode: \"environment\" } })\r\n .then((stream) => {\r\n this.video.srcObject = stream;\r\n this.video.setAttribute(\"playsinline\", \"true\");\r\n this.video.play();\r\n requestAnimationFrame(this.tick);\r\n })\r\n .catch((err) => {\r\n this.stopScan();\r\n this.setState({ videoError: true });\r\n });\r\n };\r\n\r\n initializeAudio = () => {\r\n window.AudioContext = window.AudioContext || window.webkitAudioContext;\r\n if (window.AudioContext) {\r\n window.audioContext = new window.AudioContext();\r\n }\r\n const fixAudioContext = function (e) {\r\n if (window.audioContext) {\r\n // Create empty buffer\r\n const buffer = window.audioContext.createBuffer(1, 1, 22050);\r\n const source = window.audioContext.createBufferSource();\r\n source.buffer = buffer;\r\n // Connect to output (speakers)\r\n source.connect(window.audioContext.destination);\r\n // Play sound\r\n if (source.start) {\r\n source.start(0);\r\n } else if (source.play) {\r\n source.play(0);\r\n } else if (source.noteOn) {\r\n source.noteOn(0);\r\n }\r\n }\r\n // Remove events\r\n document.removeEventListener(\"touchstart\", fixAudioContext);\r\n document.removeEventListener(\"touchend\", fixAudioContext);\r\n };\r\n // iOS 6-8\r\n document.addEventListener(\"touchstart\", fixAudioContext);\r\n // iOS 9\r\n document.addEventListener(\"touchend\", fixAudioContext);\r\n };\r\n\r\n stopScan = () => {\r\n this.setState({\r\n scanning: false,\r\n btnText: BTN_TXT.START,\r\n boxShadow: \"0 4px 8px 0 rgba(0, 0, 0, .2), 0 6px 20px 0 rgba(0, 0, 0, .19)\",\r\n });\r\n this.video.pause();\r\n if (this.video.srcObject) {\r\n this.video.srcObject.getVideoTracks().forEach((track) => track.stop());\r\n this.video.srcObject = null;\r\n }\r\n };\r\n\r\n tick = (time) => {\r\n if (this.video.readyState === this.video.HAVE_ENOUGH_DATA) {\r\n if (this.state.fpsOn) {\r\n fps = 1000 / (time - this.fpsTimestamp);\r\n this.fpsTimestamp = time;\r\n }\r\n\r\n this.canvas.drawImage(this.video, sx, sy, sw, sh, dx, dy, dw, dh);\r\n\r\n if (this.state.bw) this.monochromize();\r\n if (this.state.crosshair) this.drawCrosshair();\r\n if (this.state.fpsOn) this.drawFPS(fps);\r\n if (this.state.scanning) requestAnimationFrame(this.tick);\r\n if (this.decodeQR) this.recogniseQRcode(time);\r\n } else if (this.state.scanning) requestAnimationFrame(this.tick);\r\n };\r\n\r\n monochromize = () => {\r\n let imgd = this.canvas.getImageData(0, 0, this.canvasElement.width, this.canvasElement.height);\r\n let pix = imgd.data;\r\n for (let i = 0; i < pix.length; i += 4) {\r\n let gray = pix[i] * 0.3 + pix[i + 1] * 0.59 + pix[i + 2] * 0.11;\r\n pix[i] = gray;\r\n pix[i + 1] = gray;\r\n pix[i + 2] = gray;\r\n }\r\n this.canvas.putImageData(imgd, 0, 0);\r\n };\r\n\r\n drawCrosshair = () => {\r\n this.canvas.fillStyle = \"rgba(255,255,255,0.4)\";\r\n const shape = new Path2D(crossHairSvg);\r\n this.canvas.fill(shape);\r\n };\r\n\r\n recogniseQRcode = (time) => {\r\n if (time - this.oldTime > this.scanRate) {\r\n this.oldTime = time;\r\n let imageData;\r\n if (this.state.crosshair === true) imageData = this.canvas.getImageData(x0, y0, crossHairWidth, crossHairHeight);\r\n else imageData = this.canvas.getImageData(0, 0, this.canvasElement.width, this.canvasElement.height);\r\n this.qrworker.postMessage({ width: imageData.width, height: imageData.height });\r\n this.qrworker.postMessage(imageData, [imageData.data.buffer]);\r\n }\r\n };\r\n\r\n drawFPS = (fps) => {\r\n this.canvas.font = \"normal 16pt Arial\";\r\n this.canvas.fillStyle = \"#f8ff4c\";\r\n this.canvas.fillText(Math.round(fps) + \" fps\", 10, CANVAS_SIZE.HEIGHT - 16);\r\n };\r\n\r\n componentDidMount() {\r\n this.canvasElement = document.getElementById(\"canvas\");\r\n this.canvas = this.canvasElement.getContext(\"2d\");\r\n this.canvasElement.width = CANVAS_SIZE.WIDTH;\r\n this.canvasElement.height = CANVAS_SIZE.HEIGHT;\r\n this.startScan();\r\n }\r\n\r\n onBtnClickHandler = (e) => {\r\n e.preventDefault();\r\n if (this.state.scanning) this.stopScan();\r\n else this.startScan();\r\n };\r\n\r\n onBtnOpenSearchHandler = (e) => {\r\n e.preventDefault();\r\n this.setState({ showSearch: true });\r\n };\r\n\r\n onCrossHairClickHandler = (e) => {\r\n e.preventDefault();\r\n this.setState({ crosshair: !this.state.crosshair });\r\n };\r\n\r\n onFPSClickHandler = (e) => {\r\n e.preventDefault();\r\n this.setState({ fpsOn: !this.state.fpsOn });\r\n };\r\n\r\n onBWClickHandler = (e) => {\r\n e.preventDefault();\r\n this.setState({ bw: !this.state.bw });\r\n };\r\n\r\n onBeepClickHandler = (e) => {\r\n e.preventDefault();\r\n this.setState({ beep: !this.state.beep });\r\n };\r\n\r\n startStyle = () => {\r\n const style = { width: 64, textAlign: \"center\" };\r\n if (this.state.scanning) return { backgroundColor: \"red\", ...style };\r\n else return { backgroundColor: \"\", ...style };\r\n };\r\n\r\n fpsStyle = () => {\r\n if (this.state.fpsOn) return { backgroundColor: \"green\" };\r\n else return { backgroundColor: \"\" };\r\n };\r\n\r\n xHairStyle = () => {\r\n if (this.state.crosshair) return { backgroundColor: \"green\" };\r\n else return { backgroundColor: \"\" };\r\n };\r\n\r\n bwStyle = () => {\r\n if (this.state.bw) return { backgroundColor: \"green\" };\r\n else return { backgroundColor: \"\" };\r\n };\r\n\r\n beepStyle = () => {\r\n if (this.state.beep) return { backgroundColor: \"green\" };\r\n else return { backgroundColor: \"\" };\r\n };\r\n\r\n transformToggleStyle = () => {\r\n if (this.state.transformToggle) return { backgroundColor: \"green\", padding: 12 };\r\n else return { backgroundColor: \"\", padding: 12 };\r\n };\r\n\r\n render() {\r\n return (\r\n
\r\n {this.state.videoError ? (\r\n
\r\n

\r\n Your device does not support camera access or something went wrong{\" \"}\r\n \r\n 🤔\r\n \r\n

\r\n
\r\n

You can search asset below

\r\n \r\n {this.state.showSearch && }\r\n
\r\n ) : (\r\n <>{this.renderScan()}\r\n )}\r\n
{process.env.NODE_ENV === \"development\" ? JSON.stringify(this.props, 0, 2) : \"\"}
\r\n
\r\n );\r\n }\r\n\r\n renderScan = () => {\r\n return (\r\n
\r\n {this.renderCanvas()}\r\n {/* {this.renderButtons()} */}\r\n
\r\n

You can search asset below

\r\n
\r\n \r\n Find with asset name\r\n \r\n
\r\n {this.state.showSearch && }\r\n
\r\n );\r\n };\r\n\r\n renderCanvas = () => {\r\n return ;\r\n };\r\n\r\n // renderButtons = () => {\r\n // return (\r\n //
\r\n // \r\n // {this.state.btnText}\r\n // \r\n //
\r\n // );\r\n // };\r\n\r\n componentWillUnmount() {\r\n if (this.state.scanning === true) this.stopScan();\r\n }\r\n\r\n renderCopyToClipboardBtn = () => {\r\n return (\r\n \r\n COPY\r\n \r\n );\r\n };\r\n\r\n onClickCopyToClipboard = async (e) => {\r\n e.preventDefault();\r\n await navigator.clipboard.writeText(this.state.barcode);\r\n const btnId = document.getElementById(\"copyToClip\");\r\n btnId.innerText = \"DONE\";\r\n btnId.style.backgroundColor = \"green\";\r\n setTimeout(() => {\r\n btnId.innerText = \"COPY\";\r\n btnId.style.backgroundColor = \"\";\r\n }, 1000);\r\n };\r\n}\r\n\r\nScan.propTypes = {\r\n beep: PropTypes.bool,\r\n fps: PropTypes.bool,\r\n decode: PropTypes.bool,\r\n worker: PropTypes.string,\r\n scanRate: PropTypes.number,\r\n bw: PropTypes.bool,\r\n crosshair: PropTypes.bool,\r\n};\r\n\r\nScan.defaultProps = {\r\n beep: true,\r\n fps: false,\r\n decode: true,\r\n worker: WORKER_TYPE.WASM,\r\n scanRate: 250,\r\n bw: false,\r\n crosshair: true,\r\n};\r\n\r\nexport default withRouter(Scan);\r\n","import React from \"react\";\r\nimport Scan from \"../components/scan\";\r\n\r\nconst Home = () => {\r\n return (\r\n
\r\n
\r\n
\r\n Asset Tracking\r\n
\r\n
\r\n {/* {mode === null &&

Select type of code

}\r\n
\r\n setMode(\"Barcode\")}\r\n >\r\n Barcode\r\n \r\n setMode(\"QRcode\")}\r\n >\r\n QRcode\r\n \r\n
*/}\r\n\r\n {/*
\r\n {mode === \"Barcode\" && (\r\n <>\r\n
\r\n \r\n
\r\n \r\n )}\r\n {mode === \"QRcode\" && (\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\n};\r\n\r\nexport default Home;\r\n","export default \"data:image/png;base64,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\"","import { Fragment } from \"react\";\r\nimport { Listbox, Transition } from \"@headlessui/react\";\r\nimport { CheckIcon, SelectorIcon } from \"@heroicons/react/solid\";\r\n\r\nfunction classNames(...classes) {\r\n return classes.filter(Boolean).join(\" \");\r\n}\r\n\r\nexport default function SelectMenu(props) {\r\n const { title, keyName, keyDesc, list, selectDefault, setSelectDefault } = props;\r\n // const [selected, setSelected] = useState(selectDefault);\r\n return (\r\n setSelectDefault(newValue)}>\r\n {({ open }) => (\r\n <>\r\n {title}\r\n
\r\n \r\n \r\n \r\n {selectDefault ? selectDefault[keyName] : \"fill user before select tenant\"}{\" \"}\r\n {keyDesc ? `: ${selectDefault[keyDesc]}` : \"\"}\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {list && (\r\n \r\n {list.map((item, idx) => (\r\n \r\n classNames(\r\n active ? \"text-white bg-blue-600\" : \"text-gray-900\",\r\n \"cursor-pointer select-none relative py-2 pl-3 pr-9\"\r\n )\r\n }\r\n value={item}\r\n >\r\n {({ selected, active }) => (\r\n <>\r\n
\r\n \r\n {item[keyName] ?? \"\"} {keyDesc ? `: ${item[keyDesc]}` : \"\"}\r\n \r\n
\r\n\r\n {selected ? (\r\n \r\n \r\n \r\n ) : null}\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","import { useState } from \"react\";\r\n\r\nexport default function useToken() {\r\n const getToken = () => {\r\n const tokenString = sessionStorage.getItem(\"AccessToken\");\r\n return tokenString;\r\n };\r\n\r\n const [token, setToken] = useState(getToken());\r\n\r\n const saveToken = (userToken) => {\r\n sessionStorage.setItem(\"AccessToken\", userToken);\r\n setToken(userToken);\r\n };\r\n\r\n const clearToken = () => {\r\n sessionStorage.removeItem(\"AccessToken\");\r\n localStorage.clear();\r\n };\r\n\r\n return {\r\n setToken: saveToken,\r\n token,\r\n clearToken,\r\n };\r\n}\r\n","import { useState } from \"react\";\r\n\r\nexport default function useLocalStorage() {\r\n const getLocalStorage = () => {\r\n const s1 = localStorage.getItem(\"UserName\");\r\n const s2 = localStorage.getItem(\"Tenant\");\r\n return { userName: s1, tenant: s2 };\r\n };\r\n\r\n const [ls, setLs] = useState(getLocalStorage());\r\n const saveLocalStorage = ({ UserName, Tenant }) => {\r\n localStorage.setItem(\"UserName\", UserName);\r\n localStorage.setItem(\"Tenant\", Tenant);\r\n\r\n setLs({ userName: UserName, tenant: Tenant });\r\n };\r\n\r\n return {\r\n setLs: saveLocalStorage,\r\n ls,\r\n };\r\n}\r\n","import React, { useReducer, useState } from \"react\";\r\nimport { withRouter } from \"react-router\";\r\nimport logo from \"../assets/logo.png\";\r\nimport { checkUserTenant, loginUser } from \"../services/api\";\r\n\r\nimport { ToastContainer } from \"react-toastify\";\r\nimport SelectMenu from \"../components/SelectMenu\";\r\nimport useToken from \"../useToken\";\r\nimport useLocalStorage from \"../useLocalStorage\";\r\n\r\nconst formReducer = (state, event) => {\r\n return {\r\n ...state,\r\n [event.name]: event.value,\r\n };\r\n};\r\n\r\nconst Login = (props) => {\r\n const { token, setToken, clearToken } = useToken();\r\n const { setLs } = useLocalStorage();\r\n const [formData, setFormData] = useReducer(formReducer, {});\r\n const [submitting, setSubmitting] = useState(true);\r\n const [tenantDefault, setTenantDefault] = useState();\r\n const [tenantList, setTenantList] = useState([]);\r\n\r\n React.useEffect(() => {\r\n let isMounted = true;\r\n if (token) {\r\n if (isMounted) {\r\n clearToken();\r\n }\r\n }\r\n return () => {\r\n isMounted = false;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const handleSubmit = async (event) => {\r\n event.preventDefault();\r\n\r\n setSubmitting(true);\r\n\r\n const user = await loginUser(formData, tenantDefault);\r\n if (user) {\r\n setLs(user);\r\n setToken(user.AccessToken);\r\n\r\n props.history.push({\r\n pathname: \"/\",\r\n //state: { userResponse: user },\r\n });\r\n }\r\n\r\n setSubmitting(false);\r\n };\r\n\r\n const handleChange = (event) => {\r\n setFormData({\r\n name: event.target.name,\r\n value: event.target.value,\r\n });\r\n };\r\n\r\n const handleBlur = async (event) => {\r\n if (formData.username) {\r\n setSubmitting(true);\r\n const tenant = await checkUserTenant(formData);\r\n if (tenant && tenant.length > 0) {\r\n setTenantList(tenant);\r\n let defaultTenant = tenant.filter((i) => i.IsDefault);\r\n setTenantDefault(defaultTenant[0]);\r\n setSubmitting(false);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \"logo\"\r\n

Sign in to your account

\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\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(Login);\r\n","import React from \"react\";\r\nimport { withRouter } from \"react-router\";\r\nimport { Link } from \"react-router-dom\";\r\nimport logo from \"../assets/logo.png\";\r\nimport useLocalStorage from \"../useLocalStorage\";\r\nimport { logout } from \"../services/api\";\r\n\r\nconst Header = (props) => {\r\n const { ls } = useLocalStorage();\r\n const { userName, tenant } = ls;\r\n\r\n const handleLogout = async () => {\r\n await logout();\r\n props.history.push(\"/Login\");\r\n };\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n \"logo\"\r\n \r\n\r\n
\r\n \r\n \r\n \r\n \r\n\r\n

\r\n {userName} @{tenant}\r\n

\r\n
\r\n \r\n Logout\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 {userName} @{tenant}\r\n

\r\n
\r\n\r\n \r\n Logout\r\n \r\n
\r\n
\r\n
*/}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withRouter(Header);\r\n","import React from \"react\";\r\nimport PreviewImage from \"../assets/previewImage.png\";\r\n\r\nconst CardImage = ({ base64Src }) => {\r\n return (\r\n <>\r\n {base64Src ? (\r\n
\r\n setShowUpload(true)}\r\n />\r\n
\r\n ) : (\r\n
\r\n setShowUpload(true)}\r\n />\r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default CardImage;\r\n","import React from \"react\";\r\nimport { getComment, getCommentById, downloadCommentById, addComment } from \"../services/api\";\r\nimport useLocalStorage from \"../useLocalStorage\";\r\n\r\nconst CommentBox = ({ data }) => {\r\n const [isLoading, setIsLoading] = React.useState(true);\r\n const [commentList, setCommentList] = React.useState([]);\r\n const [message, setMessage] = React.useState();\r\n const { ls } = useLocalStorage();\r\n const { userName } = ls;\r\n\r\n const fetchComment = async (id) => {\r\n const response = await getComment(id);\r\n //get first item when found if not found setData === undefined\r\n\r\n if (response) {\r\n response.Data.forEach((element) => {\r\n let date = new Date(element.LastModified);\r\n element.stringDate = `${date.getDate()}/${date.getMonth() + 1}/${date.getFullYear()}`;\r\n });\r\n setCommentList(response.Data);\r\n }\r\n\r\n setIsLoading(false);\r\n\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n };\r\n\r\n React.useEffect(() => {\r\n fetchComment(data.RegId);\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const attachFile = (e) => {\r\n const reader = new FileReader();\r\n reader.onloadend = async () => {\r\n const base64String = reader.result.replace(\"data:\", \"\").replace(/^.+,/, \"\");\r\n let param = {\r\n Module: \"AST_Reg\",\r\n ModuleId: data.RegId,\r\n Message: \"\",\r\n File: base64String,\r\n FileInfo: {\r\n FileName: e.target.files[0].name,\r\n FileExtension: e.target.files[0].type,\r\n },\r\n UserModified: userName,\r\n };\r\n await addComment(param);\r\n await fetchComment(data.RegId, true);\r\n };\r\n reader.readAsDataURL(e.target.files[0]);\r\n };\r\n\r\n const enterSendComment = async (e) => {\r\n let key = e.key;\r\n if (key === \"Enter\") {\r\n if (!e.shiftKey) {\r\n e.preventDefault();\r\n setIsLoading(true);\r\n let param = {\r\n Module: \"AST_Reg\",\r\n ModuleId: data.RegId,\r\n Message: message,\r\n UserModified: userName,\r\n };\r\n await addComment(param);\r\n await fetchComment(data.RegId, true);\r\n }\r\n }\r\n };\r\n\r\n const sendComment = async (e) => {\r\n if (message) {\r\n let param = {\r\n Module: \"AST_Reg\",\r\n ModuleId: data.RegId,\r\n Message: message,\r\n UserModified: userName,\r\n };\r\n await addComment(param);\r\n await fetchComment(data.RegId, true);\r\n }\r\n };\r\n\r\n function do_resize(e) {\r\n var maxrows = 5;\r\n var txt = e.target.value;\r\n var cols = e.target.cols;\r\n\r\n var arraytxt = txt.split(\"\\n\");\r\n var rows = arraytxt.length;\r\n\r\n for (var i = 0; i < arraytxt.length; i++) rows += parseInt(arraytxt[i].length / cols);\r\n\r\n if (rows > maxrows) e.target.rows = maxrows;\r\n else e.target.rows = rows;\r\n }\r\n\r\n const Downloadlink = ({ item }) => {\r\n const b64toBlob = (b64Data, contentType = \"\", sliceSize = 512) => {\r\n const byteCharacters = window.atob(b64Data);\r\n const byteArrays = [];\r\n\r\n for (let offset = 0; offset < byteCharacters.length; offset += sliceSize) {\r\n const slice = byteCharacters.slice(offset, offset + sliceSize);\r\n\r\n const byteNumbers = new Array(slice.length);\r\n for (let i = 0; i < slice.length; i++) {\r\n byteNumbers[i] = slice.charCodeAt(i);\r\n }\r\n\r\n const byteArray = new Uint8Array(byteNumbers);\r\n byteArrays.push(byteArray);\r\n }\r\n\r\n const blob = new Blob(byteArrays, { type: contentType });\r\n return blob;\r\n };\r\n\r\n const clickFile = async (id, file) => {\r\n if (file.FileExtension.search(\"image\") !== -1) {\r\n //view image\r\n const r = await getCommentById(id);\r\n if (r.File) {\r\n const blob = b64toBlob(r.File, item.FileInfo.FileExtension);\r\n const blobUrl = URL.createObjectURL(blob);\r\n window.open(blobUrl, \"_blank\").focus();\r\n }\r\n } else {\r\n //view downloadfile\r\n const blob = await downloadCommentById(id);\r\n if (window.navigator.msSaveOrOpenBlob) {\r\n window.navigator.msSaveOrOpenBlob(blob, file.FileName);\r\n } else {\r\n const a = document.createElement(\"a\");\r\n document.body.appendChild(a);\r\n const url = window.URL.createObjectURL(blob);\r\n a.href = url;\r\n a.download = file.FileName;\r\n a.click();\r\n setTimeout(() => {\r\n window.URL.revokeObjectURL(url);\r\n document.body.removeChild(a);\r\n }, 0);\r\n }\r\n }\r\n };\r\n\r\n return (\r\n
clickFile(item.Id, item.FileInfo)}>\r\n {item.FileInfo.FileName}\r\n
\r\n );\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {isLoading ? (\r\n
Loading...
\r\n ) : (\r\n
\r\n
\r\n {commentList.map((item, idx) => {\r\n return (\r\n \r\n
\r\n {item.Message && item.Message !== \"\" ? item.Message : }\r\n \r\n {item.stringDate}\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 attachFile(e);\r\n }}\r\n //capture=\"user\"\r\n webkitdirectory mozdirectory directory\r\n />\r\n
\r\n \r\n sendComment(e)}\r\n >\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default CommentBox;\r\n","import React, { useState } from \"react\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport { withRouter } from \"react-router\";\r\nimport Modal from \"react-modal\";\r\nimport CardImage from \"./CardImage\";\r\nimport { format } from \"date-fns\";\r\nimport CommentBox from \"./CommentBox\";\r\nimport SelectMenu from \"../components/SelectMenu\";\r\n\r\nconst customStyles = {\r\n content: {\r\n inset: \"unset\",\r\n padding: 0,\r\n },\r\n};\r\n\r\nconst DataDisplay = (props) => {\r\n let { code, loadingBtn, data, locationList, UploadImg, UpdateData, SaveData } = props;\r\n const [showUpload, setShowUpload] = useState(false);\r\n const [showComment, setShowComment] = useState(false);\r\n\r\n if (data === undefined) {\r\n return (\r\n \r\n );\r\n }\r\n\r\n Modal.setAppElement(\"#main\");\r\n\r\n const actionToggle = () => {\r\n setShowComment(!showComment);\r\n let fab = document.querySelector(\"#fab\");\r\n fab.classList.toggle(\"show\");\r\n };\r\n\r\n return (\r\n <>\r\n {data ? (\r\n <>\r\n
\r\n
\r\n {data?.AstPhoto ? (\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n {/*
\r\n
{data?.Name}
\r\n
\r\n {data.Id} {\"-\"} {data.No}\r\n
\r\n
{data.Barcode}
\r\n
*/}\r\n
\r\n {/*
\r\n
{data?.Name}
\r\n
\r\n {data.Id} {\"-\"} {data.No}\r\n
\r\n
{data.Barcode}
\r\n
*/}\r\n
\r\n
\r\n
AssetId :
\r\n
\r\n {data.Id} {\"-\"} {data.No}\r\n
\r\n
AssetName :
\r\n
{data?.Name}
\r\n
Category :
\r\n
\r\n {data.CategoryCode} : {data.AstCateDesc}\r\n
\r\n
Input date :
\r\n
{data?.InputDate ? format(new Date(data?.InputDate), \"dd/MM/yyyy\") : \"\"}
\r\n
Acquired date :
\r\n
\r\n {data?.AcquireDate ? format(new Date(data?.AcquireDate), \"dd/MM/yyyy\") : \"\"}\r\n
\r\n
Remain Qty. :
\r\n
\r\n {data.Qty} {data.UnitCode}\r\n
\r\n
Location :
\r\n
\r\n {/* {data.LocationCode} : {data.AstLocDesc} */}\r\n UpdateData(e, \"LocCode\")}\r\n keyName={\"LocCode\"}\r\n keyDesc={\"Description\"}\r\n />\r\n
\r\n
Transfer date :
\r\n
\r\n {data?.TransferDate ? format(new Date(data?.TransferDate), \"dd/MM/yyyy\") : \"\"}\r\n
\r\n
Serial No. :
\r\n
\r\n UpdateData(e)}\r\n />\r\n
\r\n
Specification :
\r\n
\r\n UpdateData(e)}\r\n />\r\n
\r\n
Remark :
\r\n
\r\n UpdateData(e)}\r\n />\r\n
\r\n
\r\n\r\n
\r\n {\r\n SaveData();\r\n }}\r\n >\r\n {loadingBtn && (\r\n \r\n \r\n \r\n \r\n )}\r\n Save\r\n \r\n {\r\n props.history.push(\"/\");\r\n }}\r\n >\r\n Cancel\r\n \r\n
\r\n\r\n {showUpload && (\r\n setShowUpload(false)}\r\n style={customStyles}\r\n shouldCloseOnOverlayClick={true}\r\n >\r\n
\r\n
\r\n
\r\n \r\n {\r\n UploadImg(e);\r\n setShowUpload(false);\r\n }}\r\n />\r\n
\r\n
\r\n
\r\n \r\n )}\r\n {showComment && }\r\n\r\n actionToggle()}\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(DataDisplay);\r\n","import React from 'react'\r\n\r\nconst Loading = () => {\r\n return (\r\n
\r\n Loading...\r\n
\r\n )\r\n}\r\n\r\nexport default Loading\r\n","import React, { useState, useCallback } from \"react\";\r\nimport { useStateWithCallbackLazy } from \"use-state-with-callback\";\r\nimport { withRouter } from \"react-router\";\r\nimport DataDisplay from \"../components/DataDisplay\";\r\nimport Loading from \"../components/Loading\";\r\nimport { toast } from \"react-toastify\";\r\nimport { ToastContainer } from \"react-toastify\";\r\n\r\nimport { getAssetLocationList, getAssetByRegId, getAssetByBarcode, updateAssetRegDetail } from \"../services/api\";\r\n\r\nconst AssetDisplay = (props) => {\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [loadingBtn, setIsLoadingBtn] = useState(false);\r\n const [data, setData] = useStateWithCallbackLazy(null);\r\n const [locationList, setLocationList] = useState(null);\r\n const [oldData, setOldData] = useState(null);\r\n\r\n const onInfoFetched = useCallback(async (barcodeOrRegId, searchType, mounted) => {\r\n if (!searchType) {\r\n const response = await getAssetByBarcode(barcodeOrRegId);\r\n //get first item when found if not found setData === undefined\r\n if (response.Data[0]) {\r\n const r = await getAssetLocationList();\r\n if (r) {\r\n setLocationList(r.Data);\r\n let objLoc = r.Data.find((item) => item.LocCode === response.Data[0].LocationCode);\r\n response.Data[0].objLoc = objLoc ?? \"\";\r\n }\r\n }\r\n setData(response.Data[0]);\r\n setOldData(response.Data[0]);\r\n if (mounted) {\r\n setIsLoading(false);\r\n }\r\n } else {\r\n const response = await getAssetByRegId(barcodeOrRegId);\r\n //get first item when found if not found setData === undefined\r\n if (response) {\r\n const r = await getAssetLocationList();\r\n if (r) {\r\n setLocationList(r.Data);\r\n let objLoc = r.Data.find((item) => item.LocCode === response.LocationCode);\r\n response.objLoc = objLoc ?? \"\";\r\n }\r\n setData(response);\r\n setOldData(response);\r\n } else {\r\n setData(undefined);\r\n setOldData(undefined);\r\n }\r\n if (mounted) {\r\n setIsLoading(false);\r\n }\r\n }\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n const UpdateData = (e, keyName) => {\r\n if (typeof e === \"object\" && keyName === \"LocCode\") {\r\n setData((prevState) => ({\r\n ...prevState,\r\n objLoc: e,\r\n LocationCode: e[keyName],\r\n // TransferDate: new Date(),\r\n }));\r\n } else {\r\n setData((prevState) => ({\r\n ...prevState,\r\n [e.target.name]: e.target.value,\r\n }));\r\n }\r\n };\r\n\r\n const UploadImg = (e) => {\r\n //var d = URL.createObjectURL(e.target.files[0]);\r\n const reader = new FileReader();\r\n reader.onloadend = () => {\r\n const base64String = reader.result.replace(\"data:\", \"\").replace(/^.+,/, \"\");\r\n setData(\r\n (prevState) => ({\r\n ...prevState,\r\n AstPhoto: base64String,\r\n }),\r\n (nextState) => SaveData(e, nextState)\r\n );\r\n };\r\n reader.readAsDataURL(e.target.files[0]);\r\n };\r\n\r\n const SaveData = async () => {\r\n // if (e.target.name === \"AstPhoto\") {\r\n // const { Code, UserMessage } = await updateAssetRegDetail(newData);\r\n // if (Code === 0) {\r\n // toast.success(`💾 Save ${UserMessage}`, {\r\n // position: \"bottom-center\",\r\n // autoClose: 2000,\r\n // hideProgressBar: true,\r\n // closeOnClick: true,\r\n // pauseOnHover: false,\r\n // draggable: true,\r\n // progress: undefined,\r\n // });\r\n // }\r\n // return;\r\n // }\r\n setIsLoadingBtn(true);\r\n //update transfer date when change location\r\n if (oldData.LocationCode !== data.LocationCode) {\r\n data.TransferDate = new Date();\r\n }\r\n\r\n const { Code, UserMessage } = await updateAssetRegDetail(data);\r\n if (Code === 0) {\r\n toast.success(`💾 Save ${UserMessage}`, {\r\n position: \"bottom-center\",\r\n autoClose: 2000,\r\n hideProgressBar: true,\r\n closeOnClick: true,\r\n pauseOnHover: false,\r\n draggable: true,\r\n progress: undefined,\r\n });\r\n }\r\n\r\n setTimeout(() => {\r\n setIsLoadingBtn(false);\r\n }, 2000);\r\n // if (oldData[e.target.name] !== data[e.target.name]) {\r\n // if (e.target.value !== \"\") {\r\n // const { Code, UserMessage } = await updateAssetRegDetail(data);\r\n // if (Code === 0) {\r\n // toast.success(`💾 Save ${UserMessage}`, {\r\n // position: \"bottom-center\",\r\n // autoClose: 2000,\r\n // hideProgressBar: true,\r\n // closeOnClick: true,\r\n // pauseOnHover: false,\r\n // draggable: true,\r\n // progress: undefined,\r\n // });\r\n // }\r\n // }\r\n // }\r\n };\r\n\r\n React.useEffect(() => {\r\n let mounted = true;\r\n const params = new URLSearchParams(props.location.search);\r\n const searchType = Boolean(params.get(\"regId\"));\r\n onInfoFetched(props.match.params.id, searchType, mounted);\r\n return () => {\r\n mounted = false;\r\n };\r\n // eslint-disable-next-line react-hooks/exhaustive-deps\r\n }, []);\r\n\r\n return (\r\n <>\r\n {isLoading ? : \"\"}\r\n {/* Example id===0 for not found */}\r\n {data !== null ? (\r\n \r\n ) : (\r\n \"\"\r\n )}\r\n \r\n \r\n );\r\n};\r\n\r\nexport default withRouter(AssetDisplay);\r\n","import React, { useState } from \"react\";\r\nimport SearchInputField from \"./SearchInputField\";\r\nconst NotFound = (props) => {\r\n const { location } = props;\r\n const [code] = useState(new URLSearchParams(location.search).get(\"code\"));\r\n\r\n return (\r\n
\r\n

\r\n Product not found{\" \"}\r\n \r\n 😢\r\n \r\n

\r\n

The barcode: {code} gave no results!

\r\n

You can also enter the barcode below and try again:

\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default NotFound;\r\n","import React from 'react'\r\n\r\nconst HistoryDisplay = () => {\r\n return (\r\n
\r\n History\r\n
\r\n )\r\n}\r\n\r\nexport default HistoryDisplay\r\n","import React from \"react\";\r\nimport { Switch, Route, Redirect, useHistory } from \"react-router-dom\";\r\nimport Home from \"./pages/Home\";\r\nimport Login from \"./pages/Login\";\r\n\r\nimport Header from \"./components/Header\";\r\n//import Footer from '../components/footer';\r\n\r\nimport AssetDisplay from \"./pages/AssetDisplay\";\r\nimport NotFound from \"./components/NotFound\";\r\nimport HistoryDisplay from \"./components/HistoryDisplay\";\r\nimport useToken from \"./useToken\";\r\n\r\nconst App = () => {\r\n const { token } = useToken();\r\n const history = useHistory();\r\n\r\n if (!token) {\r\n history.push(\"/Login\");\r\n }\r\n\r\n function PrivateRoute({ children, ...rest }) {\r\n const { token } = useToken();\r\n return (\r\n \r\n token ? (\r\n children\r\n ) : (\r\n \r\n )\r\n }\r\n />\r\n );\r\n }\r\n\r\n return (\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 {/*Add Footer */}\r\n
\r\n );\r\n};\r\n\r\nexport default App;\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/sw.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","const reportWebVitals = (onPerfEntry) => {\r\n if (onPerfEntry && onPerfEntry instanceof Function) {\r\n import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\r\n getCLS(onPerfEntry);\r\n getFID(onPerfEntry);\r\n getFCP(onPerfEntry);\r\n getLCP(onPerfEntry);\r\n getTTFB(onPerfEntry);\r\n });\r\n }\r\n};\r\n\r\nexport default reportWebVitals;\r\n","import React from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport { HashRouter } from \"react-router-dom\";\r\n\r\nimport \"./index.css\";\r\nimport \"./selectSearch.css\";\r\nimport \"react-toastify/dist/ReactToastify.css\";\r\nimport App from \"./App\";\r\n//import * as serviceWorkerRegistration from \"./serviceWorkerRegistration\";\r\nimport * as serviceWorker from './serviceWorker';\r\nimport reportWebVitals from \"./reportWebVitals\";\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById(\"root\")\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://cra.link/PWA\r\n//serviceWorkerRegistration.register();\r\nserviceWorker.register();\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\nreportWebVitals();\r\n"],"sourceRoot":""}