{"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":["apiUrl","adminToken","window","config","async","getAssetLocationList","token","sessionStorage","getItem","data","axios","get","headers","Authorization","updateAssetRegDetail","param","put","RegId","addComment","post","checkRegisterDisposal","id","responseType","withRouter","props","setParam","useState","_jsxs","onSubmit","e","preventDefault","history","push","value","className","children","_jsx","SelectSearch","options","getOptions","query","txtSearch","uriQueryString","Limit","Page","Exclude","WhereGroupList","AndOr","ConditionList","Field","Operator","Value","Data","map","_ref2","Name","AstPhoto","Barcode","name","photo","barcode","getAssetList","renderOption","option","snapshot","imgStyle","display","borderRadius","verticalAlign","marginRight","type","alt","style","width","height","src","PreviewImage","search","onChange","_","newValue","placeholder","emptyMessage","CODE_TYPE","BTN_TXT","CANVAS_SIZE","sw","sh","dw","dh","sx","sy","fps","Scan","React","Component","constructor","console","log","super","initWorker","this","qrworker","Worker","state","worker","onmessage","ev","terminate","result","stopScan","res","milliseconds","ms","rawCode","codeType","setState","beep","freq","arguments","length","undefined","duration","vol","context","audioContext","oscillator","createOscillator","gain","createGain","connect","frequency","destination","start","currentTime","stop","warn","toString","startScan","fpsTimestamp","Date","scanning","btnText","resultOpen","transformToggle","navigator","mediaDevices","getUserMedia","audio","video","facingMode","then","stream","srcObject","setAttribute","play","requestAnimationFrame","tick","catch","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","gray","putImageData","fillStyle","shape","Path2D","fill","oldTime","scanRate","imageData","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","SearchInputField","renderCopyToClipboardBtn","onClickCopyToClipboard","clipboard","writeText","btnId","getElementById","innerText","setTimeout","createElement","onplaying","videoWidth","videoHeight","decode","componentDidMount","getContext","render","role","_Fragment","componentWillUnmount","defaultProps","Home","classNames","_len","classes","Array","_key","filter","Boolean","join","SelectMenu","title","keyName","keyDesc","list","selectDefault","setSelectDefault","readOnly","noPlaceHolder","Listbox","disabled","_ref","open","Label","Button","SelectorIcon","Transition","show","as","Fragment","leave","leaveFrom","leaveTo","Options","item","idx","Option","active","_ref3","_item$keyName","selected","CheckIcon","useToken","setToken","userToken","setItem","clearToken","removeItem","localStorage","clear","useLocalStorage","ls","setLs","userName","tenant","UserName","Tenant","formReducer","event","formData","setFormData","useReducer","submitting","setSubmitting","tenantDefault","setTenantDefault","tenantList","setTenantList","useEffect","isMounted","handleChange","target","logo","user","credentials","newCredentials","Email","Language","Password","password","username","status","JSON","stringify","response","error","toast","UserMessage","position","autoClose","hideProgressBar","closeOnClick","pauseOnHover","draggable","progress","loginUser","AccessToken","pathname","onBlur","method","checkUserTenant","defaultTenant","IsDefault","autoFocus","ToastContainer","Link","to","xmlns","viewBox","stroke","strokeLinecap","strokeLinejoin","strokeWidth","d","logout","CardImage","base64Src","setShowUpload","CommentBox","isLoading","setIsLoading","commentList","setCommentList","message","setMessage","fetchComment","getComment","element","date","LastModified","stringDate","getDate","getMonth","getFullYear","focus","enterSendComment","key","shiftKey","Module","ModuleId","Message","UserModified","Downloadlink","clickFile","file","FileExtension","r","getCommentById","File","blob","b64Data","contentType","sliceSize","byteCharacters","atob","byteArrays","offset","slice","byteNumbers","charCodeAt","byteArray","Uint8Array","Blob","b64toBlob","FileInfo","blobUrl","URL","createObjectURL","downloadCommentById","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","sendComment","customStyles","content","inset","_data$SerialNo","_data$Spec","_data$Remark","code","loadingBtn","locationList","isDisposaled","UploadImg","UpdateData","SaveData","showUpload","showComment","setShowComment","Redirect","Modal","setAppElement","No","CategoryCode","AstCateDesc","InputDate","format","AcquireDate","Qty","UnitCode","objLoc","TransferDate","SerialNo","class","Spec","Remark","cx","cy","isOpen","onRequestClose","shouldCloseOnOverlayClick","capture","querySelector","classList","toggle","Loading","setIsLoadingBtn","setData","useStateWithCallbackLazy","setLocationList","oldData","setOldData","setIsDisposaled","onInfoFetched","useCallback","barcodeOrRegId","searchType","mounted","getAssetByRegId","find","LocCode","LocationCode","Result","WhereLike","WhereLikeFields","getAssetByBarcode","newData","Code","success","msg","warning","params","URLSearchParams","location","match","DataDisplay","prevState","nextState","NotFound","HistoryDisplay","App","useHistory","PrivateRoute","rest","Route","from","Switch","exact","path","component","Login","Header","AssetDisplay","isLocalhost","hostname","registerValidSW","swUrl","serviceWorker","register","registration","onupdatefound","installingWorker","installing","onstatechange","controller","onUpdate","onSuccess","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","HashRouter","basename","process","origin","fetch","indexOf","ready","unregister","reload","checkValidServiceWorker"],"mappings":"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","file":"static/js/main.90201dc4.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(`${apiUrl}/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\r\nexport async function checkRegisterDisposal(id) {\r\n let token = sessionStorage.getItem(\"AccessToken\");\r\n const { data } = await axios.get(`${apiUrl}/api/assetRegister/isDisposal/${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,iVBORw0KGgoAAAANSUhEUgAAALAAAACwCAYAAACvt+ReAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAACpVJREFUeF7tnWtqFF0QhrMEd2CWkB0kO9AdxB3EHcy3A92BS8gOMgiCIEgEQRCEAUGUmGR++jNfvZM6zCXV0/eeqnPeggeM6e453efJmTqX7j5iNI/lcnksnAmvhJnwTrgU5sIC3N/fL4WHCmST1XbXAvbBvjgGjoVj4tjH+nEMRrcQiZ6pTBcCBLuGfDsyjgo+U4DgKAPK8kyLx2BsB+QQ0AK+EdCKmlIdGikbpMYf1EuBLXXJIQKgVYOwaF1NYbyDsus5nOlpMXIOVDQqXCp/0nRgIpBbo3WmzDlF5tJWkWQ+0cvAiBRScchp0fmZG5VbFHINkGac66VheA6Ie3d3959UXEmtbVNSq8zOn7dApaByjEojBhTZSai4xacJXaHIBwoVly3uQFDkiUIuMnPcEcG1xTXWy80YMm5vb1/KRXY7S5YR6Oxx1GKowFebwDx3YuSaM63oG/KV9louJtOFw7FEWqHVwWgabHXdgaWfbI2bBFtdt4jDzI0rQy4ORhjeGheOOELqCavfOFKxGXJBjuXicIQhDhipYEqB0OExpgzxWKLutBrLDPRwjQtDAlHsKAXz3XxAXqzVmn+gAyBwiCw/cANq3p07JP5yomHvQSO1YPF8np07lZcjDfmT3wgF5S2OfCSmvMUSX2LKWzxxJZaCP5MTYIeNoGMXb3RCCn1pnAwpk7lqESM4SUF2kQYtxmQHp4dJFe6nnXVhjll4QoDbBUDobUoBuaqM1CGqOBuZkAJhxIHDZaQpGF7zMzLBThtpiwjso1MnOc0rq4CE1CEN32vV6DCBXEYKwryXdEUUOmA+LB/Odb2kL4eZ5OB4LxmKyVMJpg5kYKZNJeTD+GhTMjTTpBIcdSBjMfosnbS8nLAgYzLuBAc7bmRsROCZ6jZsIMm2PpAcjm/fvj1cXV1V8vPnT3M/54hqI3To5KDsuDkjU4HRCr9T7YYJtr4+yVVgMGgrzNbXJzkLLAwzrMbW1y+ZCzxMK8zW1y8FCNwvF2br65vcBQbiYPdxYba+vilE4O7jwnIAzro5pgSBBXG4QyvMNQ/+KURgtMIXqmXzkB35WCjnlCKw0G5ITYw/MQ4Sjl+/fq0q0RNWORN///4196niy5cvpriJ79+/m/tVYZXJC3JtzlTP+hCBw3beIMHXr18f3r9/b1bqIfnw4YNZ5gQksvabCqtMXhAnm9/FLDuE7LwtFguX4iYocC+Wquf+ENPPjJ3dA3mtSvEEBe5HozQiYvrw58+flRxWpXiCAvejURohG4ZLH9BZsSrEGxS4N/vTiKjpw8ePH80K8QYF7s/eNAJNtLWTZzDqYFWGRyhwf/amEbJBuMkL5L9WZSQgDQb8PYBUxzqHBM7F2q+KT58+meecwDixtV8VVpkccq26boeYHXLlWZ3AqGRrvxyAdNY5J9CiW/tFR1x9ujYC9+RbG3uHAtvnDTIW+Fy1XYf8Z8jZNwpsnzfIWOCnebD8IuTiHQpsnzfIVWBhodo+BnIKY6MQUGD7vEHGAm/nwfJDyPFfQIHt8wY5C7w1HiwCX1gbRYAC2+cNMm+B14vc5Yewr4WlwPZ5g8wFXt+xLP8R9u4LCmyfN8hZYGE9oWH8MgwU2D5vkLnAjwt7pCkO/ewHCmyfN8hc4Id///49Dz0CAUoWGOcOSavAQidrv1wQd0/D3z5fssClIwKfowWeWb+MAgUuF7gLgUM/PooClwvcDT0GDChw0VxC4NCvi6XARTMPPYkBKHDRLCBw6CdQUuCiWQkc+p3HJQuMe+xwz18VeDactV9GLENPI4OSBS59Jg5Q4MBQYAocGgpMgUNDgSlwaCgwBQ4NBX4UmMNoQaHAj8NonMgICgXmTNykQDiU1/pdFyjw/TUX80xEegg3nmU81J0SFPh+zuWUE4Aybr58Bm9RsrZrCwV+XE7JBe0jgvJhXcJuuX78+GFu34bSBYa7EJi3FNXQ5yv/8+fPZrnQIqPs1j5NocDLGW/qrAEtJVrQLrLVCdY3H6bAjzd18rb6CnDslLu2lQ3y7JbFok8+TIGXpxCYDzYxgKy7uSveOWFtuwvKZOW9VXTNh0sXePVgE4T8EHY2biyBq16kDWms7TdpIy/omg+XLvBKXoT8wIf7bVAnxr4WEymBtU8dkL5tPly4wOuH+0kaEXYobWiBcRuOdZxN0GJat+v0fWNo23y4cIEvVV8+4DqBYzX9+sd2m1/7+PfmZEVX6t4lt0nJAsNZ1ffoSL66+IoBoe0ra9PIRBvx62iTDxcu8Knqu2qBi3/JS50MVaCzVzVZ0ZWm+XDhAm+/7FD+M+SqtCEERqfM2veQNMmHCxb46etmxehwL/oGfQXG/kPkrmNQlw+XKvDd3d36/Rgpok4p9xHYmqzwRF0+XKrA0ti+UG3XETUP7iNw1WSFJ/blw6UK/Pv372PVdjvkl+EmNLoKjP0gQASqHhGF31nnnMhU4Kf5b4qIeXCfFjg6JQoMR1XXpxFxPJgC2+cNMhV4Pf5rhWwUamEPBbbPG2Qo8PZb6q2IlkZQYPu8QW4Cm8NnuxEtjaDA9nmD3ASuTR9SyMZh0ggKbJ83yEzg+vQhRaQ0ggLb5w1yErhR+pAiUhpRJzBmsyBxjtTNIuYk8M3NzYnq2SxkpzBP7LEqj1zl9I6M6smLqpA0Iswid7RGVgWWDL55rGsVEXHxXLVsHrIT1kaE6Mz1vZUnR5reQR2A5p233RCJwzy1x/OqsqnBtUDfwLpO0WjVedsNbYXNA3sDFUaJH1ksFuY1ikjlyrOmgb8A68AeKV1i5L3FDp1VBf4CrIN7BrcIldSxwx8txoSr1g1HpXfrm0IOFvYh2GiVcyY3aRODtL4pIrbCJDaDtb4pIuXCJDaDtr4ptBUO/UouEoPBW98UkcaFSUyk9Z2pbsOHjguHfi0Xcc1CYvuJO0PH7e3tS+ODCemNNJDt1zx0Cfmw0O+WI/4YpeNWFezQkYFZjtZxqwr5i3ltFISQ1ozacdsX8uFMJUhf5qrT9MFUgvRk+tRhN5hKkK5MNupQFyJxyGcLk8MBZ1SfwwcnOEhLxp+waBvMh0lDDp/3VgVn6UgdcER18RkY07MKTsjBxnvbBjt1ZBdXnbYmIYXmJAdJrF8LGyV0ZCLsS8TJYFy7G3FoGjoyweG1clm4HXFoGpS4WOLLm4ISF0c+8qagxMWQn7wpVGJ27PLlOlt5U+joxOXOiZP4zMOONnQJTnbkQ7hJiqECU4vWBSFxQB1qdZYZugCIq9jisXS/MGeq4AhFOPIdaega6NwxL/YP6qiozlrbkK+lV3KhmFL4YynyXmg1MfaFphRczeaHOVOGDqGjFGyNDwdb3b6Bv3y5iHy49vSw1R0yNDfmSMX4LDg8NlLoSAUnP8YB6cKMIwwTBNOKYcG1ZLpwgKDIvWGe6yEocjvY4jqNDZHZ2XsKc9xIoaMWXDwvaYJ0fi8obtC4ubk5KbBVRmv7RsQ91cvAyCFQoRnLTGlLCpUZq98ipxnXlJax6vyJBC+0dfYs9EKFPWdOy6gMyIFWTbgQaXAD6tRSYwETWtd3KAPKQmEZvUNEeq5inwszbbEhOJZ+QnLk1vtWz+F32AZgn0uVdKbHxLGf68cxauPo6H8wJI3mL8gdoAAAAABJRU5ErkJggg==\"","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();\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.value}?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={(_, newValue) => setParam(newValue)}\r\n placeholder=\"Search by asset name or asset id\"\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
\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, readOnly, noPlaceHolder } = props;\r\n // const [selected, setSelected] = useState(selectDefault);\r\n return (\r\n setSelectDefault(newValue)} disabled={readOnly}>\r\n {({ open }) => (\r\n <>\r\n {title}\r\n
\r\n \r\n \r\n \r\n {selectDefault\r\n ? selectDefault[keyName]\r\n : noPlaceHolder\r\n ? \"\"\r\n : \"fill user before select business unit\"}{\" \"}\r\n {keyDesc ? (noPlaceHolder ? \"\" : `: ${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, setShowUpload, disabled }) => {\r\n return (\r\n <>\r\n {base64Src ? (\r\n
\r\n {\r\n if (disabled) {\r\n return e.preventDefault();\r\n }\r\n setShowUpload(true);\r\n }}\r\n />\r\n
\r\n ) : (\r\n
\r\n {\r\n if (disabled) {\r\n return e.preventDefault();\r\n }\r\n setShowUpload(true);\r\n }}\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 setIsLoading(true);\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 document.getElementById(\"txtMsg\").focus();\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 setMessage(\"\");\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 setMessage(\"\");\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=\"environment\"\r\n webkitdirectory\r\n mozdirectory\r\n 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, isDisposaled, 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 readOnly={isDisposaled}\r\n noPlaceHolder\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 readOnly={isDisposaled}\r\n />\r\n {data?.SerialNo?.length > 50 &&

maximum length is 50

}\r\n
\r\n
Specification :
\r\n
\r\n UpdateData(e)}\r\n readOnly={isDisposaled}\r\n />\r\n {data?.Spec?.length > 255 &&

maximum length is 255

}\r\n
\r\n
Remark :
\r\n
\r\n UpdateData(e)}\r\n readOnly={isDisposaled}\r\n />\r\n {data?.Remark?.length > 255 &&

maximum length is 255

}\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 //capture=\"environment\"\r\n />\r\n
\r\n
\r\n
\r\n
\r\n \r\n {\r\n UploadImg(e);\r\n setShowUpload(false);\r\n }}\r\n capture=\"environment\"\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 {\r\n getAssetLocationList,\r\n getAssetByRegId,\r\n getAssetByBarcode,\r\n updateAssetRegDetail,\r\n checkRegisterDisposal,\r\n} 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 const [isDisposaled, setIsDisposaled] = useState(false);\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 const { Result } = await checkRegisterDisposal(response.Data[0].RegId);\r\n setIsDisposaled(Result);\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 const { Result } = await checkRegisterDisposal(response.RegId);\r\n setIsDisposaled(Result);\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 (e, newData) => {\r\n if (!e) {\r\n setIsLoadingBtn(true);\r\n\r\n if (isDisposaled) {\r\n let msg = \"This asset has already been disposed.\";\r\n toast.warning(`${msg}`, {\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 setIsLoadingBtn(false);\r\n return;\r\n }\r\n\r\n console.log(data);\r\n\r\n if (data?.SerialNo?.length > 50) {\r\n setIsLoadingBtn(false);\r\n return;\r\n }\r\n if (data?.Spec?.length > 255) {\r\n setIsLoadingBtn(false);\r\n return;\r\n }\r\n if (data?.Remark?.length > 255) {\r\n setIsLoadingBtn(false);\r\n return;\r\n }\r\n\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 } else {\r\n if (e.target.name === \"AstPhoto\" || e.target.name === \"AstPhotoUpload\") {\r\n setIsLoadingBtn(true);\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 setTimeout(() => {\r\n setIsLoadingBtn(false);\r\n }, 2000);\r\n return;\r\n }\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\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":""}