{"version":3,"sources":["componnents/context/AppContext.tsx","componnents/context/AddAssetContext.tsx","componnents/Login.tsx","componnents/formTemplate/FormEditImg.tsx","componnents/formTemplate/FormErrorDivTemplate.tsx","componnents/formTemplate/FormToolTip.tsx","componnents/formTemplate/FormTemplateLabel.tsx","componnents/formTemplate/FormInternalDivTemplate.tsx","componnents/formTemplate/FormSubmitButton.tsx","componnents/formTemplate/FormNewTypeSelectInputDivTemplate.tsx","componnents/formTemplate/FormSelectInternalDivTemplate.tsx","componnents/addAsset/AddAssetForm.tsx","componnents/PopMessage/PopMessageDetailsDiv.tsx","componnents/PopMessage/PopMessageDetailsContainer.tsx","componnents/PopMessage/PopMessage.tsx","componnents/NavBar.tsx","componnents/HeaderTemplate.tsx","componnents/addAsset/AddAsset.tsx","componnents/context/ViewEditAssetContext.tsx","componnents/viewEditAsset/ViewEditAssetForm.tsx","componnents/viewEditAsset/ViewEditAsset.tsx","componnents/context/ReplaceTrackerContext.tsx","componnents/replaceTracker/ReplaceTrackerForm.tsx","componnents/replaceTracker/ReplaceTracker.tsx","componnents/replaceBatteries/ReplaceBatteries.tsx","componnents/formTemplate/FormInternalDivFileTemplate.tsx","componnents/bulkLoadAsset/BulkLoadAsset.tsx","componnents/context/AddUpdateLocationContext.tsx","componnents/addUpdateLocation/AddUpdateLocationForm.tsx","componnents/addUpdateLocation/AddUpdateLocation.tsx","componnents/singleTracker/SingleTracker.tsx","App.tsx","utils/ErrorBoundary.tsx","index.tsx"],"names":["AppContext","createContext","AppProvider","props","useState","isLogged","setIsLogged","isNavbarOpen","setIsNavbarOpen","disableLinks","setDisableLinks","enableLoadSensor","enableHomeLocation","assetTypes","locationTypes","profiles","undefined","states","configuration","setConfiguration","token","expiresOn","scope","header","headers","Authorization","username","auth","setAuth","displayMessage","setDisplayMessage","assetName","deviceId","loadSensorId","assetType","assetDescription","oldDeviceId","newDeviceId","oldDeviceIdStatus","profile","state","sensorId","firmwareVersion","assetNamesToDisplay","setAssetNamesToDisplay","Provider","value","login","navBarStatus","config","authorization","disMessage","linksDisable","navBarHandler","e","target","className","endsWith","startsWith","assetNamesArr","errorHandlerFunction","status","children","AddAssetContext","AddAssetProvider","formInput","setFormInput","isValid","message","formFieldsValid","setFormFieldsValid","defaultSelectValue","setDefaultSelectValue","selectValue","setSelectValue","errorMessage","setErrorMessage","aAForm","formVal","defaultValueSelect","valueSelect","errMessage","LoginMedia","useContext","errorHandler","password","isVisible","setIsVisible","changeHandler","name","src","alt","onSubmit","preventDefault","formData","base64FormData","Buffer","from","toString","axios","get","then","res","data","post","type","userId","catch","response","onChange","onClick","FormEditImg","id","edit","editClickHandler","FormErrorDivTemplate","FormToolTip","dataToolTip","FormTemplateLabel","htmlFor","label","FormInternalDivTemplate","errorSpace","checkSign","list","listId","maxLength","autoComplete","placeholder","placeHolder","onBlur","disabled","array","map","FormSubmitButton","text","FormNewTypeSelectInputDivTemplate","selectChangeHandler","selected","optionList","option","FormSelectInternalDivTemplate","AddAssetForm","deviceIdArr","setDeviceIdArr","addNewType","setAddNewType","input","test","submitHandler","isReCheck","console","log","formValidation","isFormValid","tempFormFieldsValid","Object","entries","forEach","key","messageBody","assetInfo","assetNameReCheck","isDisabled","profileStateChangeHandler","toUpperCase","length","deviceIdFilter","Type","Pattern","names","includes","errorDescription","Error","newType","tempAssetTypes","push","PopMessageDetailsDiv","style","textAlign","display","width","divKey","PopMessageDetailsContainer","loadSensorData","PopMessage","loaderProgress","loaderTotal","onClose","useEffect","setTimeout","assetHandler","Boolean","errorTitle","error","whiteSpace","errorList","errorElement","i","elementName","assetInfoOfNewId","deviceIdReplaceHandler","fileName","fileNamesList","messageStatus","NavBar","clickHandler","currentTarget","navData","isActive","to","HeaderTemplate","title","navBarClickHandler","AddAsset","ViewEditAssetContext","ViewEditAssetProvider","formInputEdit","setFormInputEdit","selectValueObj","setSelectValueObj","profileSelectValue","setProfileSelectValue","setAssetInfoOfNewId","field","isFieldEnable","setIsFieldEnable","form","formEdit","newIdAssetInfo","fieldEnable","profileValueSelect","valueSelectObj","ViewEditAssetForm","setAssetNamesArr","allowEdit","setAllowEdit","clearFields","tempFormInputEdit","assetHomeLocation","isDeviceIncludes","deviceArr","isDeviceIncludesInEdit","targetId","slice","editAssetNameButtonHandler","operation","renameAsset","oldAssetName","newAssetName","alert","ViewEditAsset","ReplaceTrackerContext","ReplaceTrackerProvider","filedBlock","setFieldBlock","defaultSelect","setDefaultSelect","Form","blockField","selectDefault","ReplaceTrackerForm","oldDeviceIdArr","setOldDeviceIdArr","newDeviceIdArr","setNewDeviceIdArr","getAssetInfo","assetInfoData","keys","ReplaceTracker","replaceTracker","ReplaceBatteries","isVaild","sensorIdArr","setSensorIdArr","FormInternalDivFileTemplate","accept","BulkLoadAsset","btnText","requestType","successesText","failText","tooltipText","csvLines","setCsvLines","headerLine","setHeaderLine","file","setFile","setErrorList","finishedCsvRows","setFinishedCsvRows","bulkLoadAssetHandler","a","requestsBodies","chunk","item","join","newErrors","successCount","finishedRows","newErrorMessage","reqBody","href","download","fileList","files","size","reader","FileReader","onload","result","_csvLines","split","filter","line","replace","_headerLine","shift","readAsText","AddUpdateLocationContext","AddUpdateLocationProvider","isFileJson","setIsFileJson","fileData","locationType","FileData","isJson","AddUpdateLocationForm","obj","JSON","parse","tempFileNamesList","features","Array","isArray","location","properties","findNamesList","AddUpdateLocation","setMessageStatus","locationInfo","geoJson","SingleTracker","setDeviceId","setError","marginTop","App","currentVersion","packageJson","version","side","dependencies","path","element","ErrorBoundary","hasError","errorInfo","this","_","Component","defaults","baseURL","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.cb7340f2.chunk.js","sourcesContent":["import React, { useState, createContext } from \"react\";\r\nimport { IAuth, IConfiguration } from \"../../interfaces/interface\";\r\n\r\nexport const AppContext = createContext({});\r\n\r\nexport const AppProvider: React.FC = (props) => {\r\n const [isLogged, setIsLogged] = useState(false);\r\n const [isNavbarOpen, setIsNavbarOpen] = useState(true);\r\n const [disableLinks, setDisableLinks] = useState([])\r\n const [configuration, setConfiguration] = useState({\r\n enableLoadSensor: true,\r\n enableHomeLocation: false,\r\n assetTypes: [],\r\n locationTypes: [],\r\n profiles: undefined,\r\n states: undefined,\r\n\r\n })\r\n const [auth, setAuth] = useState({\r\n token: \"\",\r\n expiresOn: \"\",\r\n scope: \"\",\r\n header:{\r\n headers: {\r\n Authorization: ``\r\n }\r\n },\r\n username:\"\",\r\n })\r\n const [displayMessage, setDisplayMessage] = useState(\"none\")\r\n\r\n const navBarClickHandler = (e: any): void => { \r\n if(e.target.className.endsWith(\"close-nav-bar-icon\") && displayMessage === \"none\") {\r\n setIsNavbarOpen(true);\r\n }else if(isNavbarOpen && \r\n (e.target.className.startsWith(\"page\"))){\r\n setIsNavbarOpen(false);\r\n }\r\n }\r\n const errorHandler = (status:number):string => {\r\n switch(status){\r\n case 401:\r\n return \"Invalid username or password\";\r\n case 408:\r\n return \"Hoopo Server is temporarily not available. Please try again later\";\r\n case 440:\r\n return \"Hoopo DB Server is temporarily not available. Please try again later\";\r\n case 441:\r\n return \"Hoopo Server is temporarily not available. Please try again later\";\r\n case 442:\r\n return \"Hoopo Server is temporarily not available(0x2). Please try again later\";\r\n case 443:\r\n return \"Hoopo Server is temporarily not available(0x3). Please try again later\";\r\n case 500: \r\n return \"Hoopo Web Server is temporarily not available. Please try again later\"; \r\n default:\r\n return \"Hoopo Server is temporarily not available(0x10). Please try again later\";\r\n }\r\n }\r\n const [assetNamesToDisplay, setAssetNamesToDisplay] = useState({\r\n assetName: \"Asset Name\",\r\n deviceId: \"Tracker Id\",\r\n loadSensorId: \"Load Sensor ID\",\r\n assetType: \"Asset Type\",\r\n assetDescription: \"Description\",\r\n oldDeviceId: \"Old Tracker ID\",\r\n newDeviceId: \"New Tracker ID\",\r\n oldDeviceIdStatus: \"Old Tracker ID New Status\",\r\n profile: \"Profile\",\r\n state: \"State\",\r\n sensorId: \"Sensor ID\",\r\n firmwareVersion: \"Firmware Version\"\r\n})\r\n\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n","import React, { useState, createContext } from \"react\";\r\nimport { IAddAssetForm, IAddAssetFormValidation } from \"../../interfaces/interface\";\r\n\r\nexport const AddAssetContext = createContext({});\r\n\r\nexport const AddAssetProvider: React.FC = (props) => {\r\n const [formInput, setFormInput] = useState({\r\n assetName: \"\",\r\n deviceId: \"\",\r\n assetType: \"\",\r\n assetDescription: \"\",\r\n profile:\"\",\r\n state: \"\"\r\n });\r\n const [formFieldsValid, setFormFieldsValid] = useState({\r\n assetName: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n deviceId: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n assetType: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n assetDescription: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n });\r\n const [defaultSelectValue, setDefaultSelectValue] = useState(\"\");\r\n const [selectValue, setSelectValue] = useState(\"\");\r\n const [errorMessage, setErrorMessage] = useState(\"\")\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n","import '../css/FormTemplate.css';\r\nimport '../css/PageTemplate.css';\r\nimport '../css/Login.css';\r\nimport { useState, useContext } from 'react';\r\nimport { AppContext } from \"./context/AppContext\";\r\nimport axios from 'axios';\r\nimport {Buffer} from 'buffer';\r\nimport { IConfiguration, ILogInForm, ILoginEMessage, IAuth } from '../interfaces/interface';\r\nimport { IMessageErrorResponse } from '../interfaces/messageInterface';\r\n\r\nfunction LoginMedia() {\r\n const { login, config, authorization, errorHandlerFunction } = useContext(AppContext);\r\n const [, setIsLogged ] = login;\r\n const errorHandler: (status: number) => string = errorHandlerFunction\r\n const [, setAuth ]: React.Dispatch>[] = authorization;\r\n const [,setConfiguration]:React.Dispatch>[] = config;\r\n const [formInput, setFormInput] = useState({\r\n username: \"\",\r\n password: \"\",\r\n });\r\n const [isVisible, setIsVisible] = useState(false);\r\n const [errorMessage, setErrorMessage] = useState({\r\n displayMessage: false,\r\n message: \"\"\r\n });\r\n\r\n const changeHandler = (e:React.ChangeEvent):void => {\r\n setFormInput({\r\n ...formInput,\r\n [e.target.name]: e.target.value,\r\n });\r\n setErrorMessage({\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n };\r\n\r\n const LoginUser = (e: any): void => {\r\n e.preventDefault();\r\n const formData = `${formInput.username}:${formInput.password}`;\r\n let buffer = Buffer.from(formData, 'utf-8');\r\n const base64FormData = buffer.toString('base64');\r\n \r\n axios\r\n .get('/request-token', { \r\n headers: {\r\n Authorization: `Basic ${base64FormData}`\r\n //,type: \"cookie\"\r\n }})\r\n .then( res => { \r\n setAuth({\r\n token: res.data.token,\r\n expiresOn: res.data.expiresOn,\r\n scope: res.data.scope,\r\n header:{\r\n headers: {\r\n Authorization: `bearer ${res.data.token}`\r\n }\r\n },\r\n username: formInput.username,\r\n })\r\n // ///change for dev\r\n setIsLogged(true);\r\n\r\n axios.post(\"/message\", {\r\n type: \"getAssociationConfig\",\r\n userId: formInput.username\r\n },{\r\n headers: {\r\n Authorization: `bearer ${res.data.token}`\r\n }\r\n }).then(res => { \r\n setConfiguration(res.data.configuration);\r\n \r\n // ///change for dev\r\n\r\n // if(!res.data.configuration.enableLoadSensor){\r\n // console.log(\"load-sensor-isun\");\r\n \r\n // let temp = disableLinks\r\n // temp.push(\"Add-Load-Sensor\")\r\n // setDisableLinks(temp)\r\n // }\r\n setIsLogged(true);\r\n setErrorMessage({\r\n displayMessage: false,\r\n message: \"\"\r\n }) \r\n \r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage({\r\n displayMessage: true,\r\n message: errorMessage\r\n })\r\n })\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage({\r\n displayMessage: true,\r\n message: errorMessage\r\n })\r\n })\r\n\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n hoopo logo \r\n \r\n
Assets in sight
\r\n

Asset Association Tool

\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n setIsVisible(!isVisible)}>\r\n show/hide password \r\n\r\n \r\n
\r\n
\r\n {errorMessage.displayMessage &&\r\n `${errorMessage.message}`\r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default LoginMedia;\r\n","import '../../css/FormTemplate.css'\r\n\r\nconst FormEditImg = (props:{id:string, edit:boolean, editClickHandler:(e: any) => void}) => {\r\n\r\n return (\r\n edit icon\r\n );\r\n};\r\n\r\nexport default FormEditImg;","import '../../css/FormTemplate.css'\r\n\r\nconst FormErrorDivTemplate = (props:{message:string, displayMessage:boolean }) => {\r\n\r\n return (\r\n
\r\n {props.displayMessage &&\r\n `${props.message}`\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default FormErrorDivTemplate;","import '../../css/FormTemplate.css';\r\nimport '../../css/ToolTip.css';\r\n\r\nconst FormToolTip = (props:{dataToolTip:string}) => {\r\n\r\n return (\r\n \r\n \r\n info-icon\r\n \r\n \r\n );\r\n};\r\n\r\n\r\nexport default FormToolTip;","import '../../css/FormTemplate.css';\r\nimport { IFormLabelTemplate } from '../../interfaces/interface';\r\nimport FormToolTip from './FormToolTip';\r\n\r\nconst FormTemplateLabel = (props:IFormLabelTemplate) => {\r\n\r\n return (\r\n \r\n );\r\n};\r\n\r\n\r\nexport default FormTemplateLabel;","import '../../css/FormTemplate.css'\r\nimport { IFormInternalDivTemplate } from \"../../interfaces/interface\";\r\nimport FormEditImg from \"./FormEditImg\";\r\nimport FormErrorDivTemplate from './FormErrorDivTemplate';\r\nimport FormTemplateLabel from './FormTemplateLabel';\r\n\r\nconst FormInternalDivTemplate = (props:IFormInternalDivTemplate) => {\r\n\r\n return (\r\n
\r\n \r\n {props.checkSign && \r\n \r\n green-check\r\n \r\n }\r\n
\r\n \r\n {\r\n (props.edit !== undefined && props.editClickHandler !== undefined ) &&\r\n \r\n }\r\n
\r\n {\r\n props.array &&\r\n \r\n {\r\n props.array.map((value) => (\r\n \r\n }\r\n {\r\n (props.displayMessage !== undefined && props.message !== undefined ) &&\r\n \r\n } \r\n
\r\n );\r\n};\r\n\r\n\r\nexport default FormInternalDivTemplate;","import '../../css/FormTemplate.css'\r\n\r\nconst FormSubmitButton = (props:{text:string, disabled:boolean}) => {\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default FormSubmitButton;","import '../../css/FormTemplate.css'\r\nimport { IFormNewTypeSelectInputDivTemplate } from \"../../interfaces/interface\";\r\n\r\nconst FormNewTypeSelectInputDivTemplate = (props:IFormNewTypeSelectInputDivTemplate) => {\r\n\r\n return ( \r\n
\r\n \r\n
\r\n );\r\n};\r\n \r\nexport default FormNewTypeSelectInputDivTemplate;","import '../../css/FormTemplate.css'\r\nimport { IFormSelectInternalDivTemplate } from \"../../interfaces/interface\";\r\nimport FormTemplateLabel from './FormTemplateLabel';\r\n\r\nconst FormSelectInternalDivTemplate = (props:IFormSelectInternalDivTemplate) => {\r\n\r\n return ( \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default FormSelectInternalDivTemplate;","import '../../css/App.css'\r\nimport '../../css/ToolTip.css'\r\nimport '../../css/FormTemplate.css'\r\nimport '../../css/AddAssetForm.css'\r\nimport axios from 'axios';\r\nimport React, {useContext, useState} from 'react'\r\nimport {IAddAssetForm, IAddAssetFormValidation, IAuth, IConfiguration} from '../../interfaces/interface'\r\nimport {IMessageSender, IMessageErrorResponse} from '../../interfaces/messageInterface';\r\nimport {AddAssetContext} from '../context/AddAssetContext';\r\nimport {AppContext} from '../context/AppContext';\r\nimport FormInternalDivTemplate from '../formTemplate/FormInternalDivTemplate';\r\nimport FormSubmitButton from '../formTemplate/FormSubmitButton';\r\nimport FormErrorDivTemplate from '../formTemplate/FormErrorDivTemplate';\r\nimport FormNewTypeSelectInputDivTemplate from '../formTemplate/FormNewTypeSelectInputDivTemplate';\r\nimport FormSelectInternalDivTemplate from '../formTemplate/FormSelectInternalDivTemplate';\r\n\r\nconst AddAssetForm = () => {\r\n const {aAForm, formVal, defaultValueSelect, valueSelect, errMessage} = useContext(AddAssetContext);\r\n const {navBarStatus, config, authorization, disMessage, errorHandlerFunction} = useContext(AppContext);\r\n const [isNavbarOpen] = navBarStatus;\r\n const [configuration]: IConfiguration[] = config\r\n const [, setConfiguration]: React.Dispatch>[] = config\r\n const [auth]: IAuth[] = authorization;\r\n const [formInput]: IAddAssetForm[] = aAForm;\r\n const [, setFormInput]: React.Dispatch>[] = aAForm;\r\n const [displayMessage]: string[] = disMessage;\r\n const [, setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [formFieldsValid]: IAddAssetFormValidation[] = formVal;\r\n const [, setFormFieldsValid]: React.Dispatch>[] = formVal;\r\n const [deviceIdArr, setDeviceIdArr] = useState([]);\r\n const [addNewType, setAddNewType] = useState(false);\r\n const [defaultSelectValue, setDefaultSelectValue] = defaultValueSelect;\r\n const [selectValue, setSelectValue] = valueSelect;\r\n const [, setErrorMessage]: React.Dispatch>[] = errMessage;\r\n const errorHandler: (status: number) => string = errorHandlerFunction;\r\n\r\n const deviceIdChangeHandler = (e: React.ChangeEvent): void => {\r\n let input = e.target.value.toUpperCase();\r\n if (/^[0-9a-fA-F]+$/.test(input) || input === \"\") {\r\n setFormInput({\r\n ...formInput,\r\n deviceId: input\r\n })\r\n if (input.length >= 3) {\r\n let messageBody: IMessageSender = {\r\n type: 'getDeviceIDs',\r\n userId: auth.username,\r\n deviceIdFilter: {\r\n Type: \"Unassigned Trackers\",\r\n Pattern: input,\r\n }\r\n }\r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\") {\r\n setDeviceIdArr(res.data.names)\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId: {\r\n ...formFieldsValid.deviceId,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n if (res.data.names.includes(input)) {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n } else {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId: {\r\n ...formFieldsValid.deviceId,\r\n isValid: false,\r\n }\r\n })\r\n }\r\n } else {\r\n setDeviceIdArr([])\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId: {\r\n isValid: false,\r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n } else {\r\n setDeviceIdArr([])\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId: {\r\n ...formFieldsValid.deviceId,\r\n isValid: false,\r\n }\r\n })\r\n }\r\n }\r\n }\r\n const changeHandler = (e: React.ChangeEvent): void => {\r\n let input = e.target.value;\r\n if (!(/'/.test(input)) && !(/\"/.test(input)) && !(/`/.test(input))) {\r\n setFormInput({\r\n ...formInput,\r\n [e.target.name]: input,\r\n });\r\n if (e.target.name === \"assetType\") {\r\n if (e.target.value !== \"\") {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetType: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n }\r\n if (e.target.name === \"assetName\") {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n }\r\n };\r\n const newTypeChangeHandler = (e: React.ChangeEvent): void => {\r\n let input = e.target.value;\r\n if (!(/'/.test(input)) && !(/\"/.test(input)) && !(/`/.test(input))) {\r\n setSelectValue(input);\r\n }\r\n };\r\n const selectChangeHandler = (e: React.ChangeEvent): void => {\r\n if (e.target.value === \"addNewType\") {\r\n setAddNewType(true);\r\n setFormInput({\r\n ...formInput,\r\n assetType: \"\"\r\n });\r\n } else {\r\n setFormInput({\r\n ...formInput,\r\n assetType: e.target.value,\r\n });\r\n if (e.target.value !== \"\") {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetType: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n }\r\n };\r\n const blurHandler = (e: React.FocusEvent): void => {\r\n if (e.target.value !== \"\") {\r\n let messageBody: IMessageSender = {\r\n type: 'getAssetInfo',\r\n userId: auth.username,\r\n assetInfo: formInput\r\n }\r\n try {\r\n\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\") {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName: {\r\n isValid: false,\r\n displayMessage: true,\r\n message: \"Asset already exists\"\r\n }\r\n })\r\n } else {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n } catch {\r\n\r\n throw new Error(\"The server is unavailable at this moment. please try again later...\");\r\n }\r\n }\r\n }\r\n const typeBlurHandler = (e: React.FocusEvent) => {\r\n let newType = e.target.value;\r\n if (newType !== \"\") {\r\n if (!configuration.assetTypes.includes(newType)) {\r\n let tempAssetTypes = configuration.assetTypes;\r\n tempAssetTypes.push(newType);\r\n setConfiguration({\r\n ...configuration,\r\n assetTypes: [...tempAssetTypes]\r\n });\r\n\r\n }\r\n setDefaultSelectValue(newType)\r\n setFormInput({\r\n ...formInput,\r\n assetType: newType,\r\n });\r\n setSelectValue(\"\");\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetType: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n setAddNewType(false);\r\n }\r\n const submitHandler = (e: React.FormEvent, isReCheck: boolean) => {\r\n e.preventDefault();\r\n console.log(formInput);\r\n\r\n if (formValidation(e, isReCheck)) {\r\n setDisplayMessage(\"asset-details\");\r\n }\r\n }\r\n const assetNameReCheck = (e: React.FormEvent) => {\r\n let messageBody: IMessageSender = {\r\n type: 'getAssetInfo',\r\n userId: auth.username,\r\n assetInfo: formInput\r\n }\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status !== \"OK\") {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n submitHandler(e, true);\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }\r\n const formValidation = (e: React.FormEvent, isReCheck: boolean): boolean => {\r\n let isFormValid = true\r\n let tempFormFieldsValid = formFieldsValid\r\n Object.entries(formInput).forEach(([key, value]) => {\r\n if (key === \"assetName\" || key === \"deviceId\" || key === \"assetType\") {\r\n if (value === \"\") {\r\n tempFormFieldsValid[key] = {\r\n isValid: false,\r\n displayMessage: true,\r\n message: \"Field cannot be empty\"\r\n }\r\n isFormValid = false\r\n }\r\n }\r\n })\r\n setFormFieldsValid({...tempFormFieldsValid})\r\n Object.entries(formFieldsValid).forEach(([key, value]) => {\r\n if (key === \"deviceId\" || key === \"assetType\") {\r\n if (!value.isValid) {\r\n isFormValid = false\r\n }\r\n }\r\n })\r\n if (isFormValid && !formFieldsValid.assetName.isValid) {\r\n isFormValid = false;\r\n if (!isReCheck) {\r\n assetNameReCheck(e)\r\n }\r\n }\r\n return isFormValid;\r\n }\r\n const isDisabled = (): boolean => {\r\n return displayMessage !== \"none\" || isNavbarOpen === true;\r\n }\r\n const profileStateChangeHandler = (e: React.ChangeEvent): void => {\r\n setFormInput({\r\n ...formInput,\r\n [e.target.name]: e.target.value,\r\n })\r\n if (e.target.name === \"state\" && e.target.value === \"Sleep\") {\r\n setDisplayMessage(\"warning\")\r\n }\r\n }\r\n return (\r\n
submitHandler(e, false)}>\r\n
\r\n < FormInternalDivTemplate\r\n id=\"deviceId\"\r\n label=\"Tracker ID *\"\r\n listId=\"trackersId\"\r\n type=\"list\"\r\n array={deviceIdArr}\r\n value={formInput.deviceId}\r\n maxLength={8}\r\n displayMessage={formFieldsValid.deviceId.displayMessage}\r\n message={formFieldsValid.deviceId.message}\r\n onChange={deviceIdChangeHandler}\r\n disabled={isDisabled()}\r\n />\r\n < FormInternalDivTemplate\r\n id=\"assetName\"\r\n label=\"Asset name *\"\r\n type=\"text\"\r\n value={formInput.assetName}\r\n maxLength={32}\r\n displayMessage={formFieldsValid.assetName.displayMessage}\r\n message={formFieldsValid.assetName.message}\r\n onChange={changeHandler}\r\n onBlur={blurHandler}\r\n disabled={isDisabled()}\r\n dataToolTip=\"Asset name must be unique\"\r\n placeHolder='Type...'\r\n checkSign={formFieldsValid.assetName.isValid}\r\n />\r\n\r\n\r\n
\r\n \r\n {\r\n !addNewType ?\r\n <>\r\n \r\n \r\n \r\n :\r\n
\r\n \r\n
\r\n }\r\n
\r\n < FormInternalDivTemplate\r\n id=\"assetDescription\"\r\n label=\"Description\"\r\n type=\"text\"\r\n value={formInput.assetDescription}\r\n maxLength={64}\r\n onChange={changeHandler}\r\n disabled={isDisabled()}\r\n dataToolTip=\"Optional. Additional info on your asset, like customer name\"\r\n placeHolder='Type...'\r\n errorSpace={true}\r\n />\r\n {\r\n configuration.profiles &&\r\n \r\n }\r\n {\r\n (configuration.profiles && configuration.states) &&\r\n \r\n }\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default AddAssetForm;","import '../../css/PopMessage.css'\r\n\r\nconst PopMessageDetailsDiv = (props:{divKey:string, value:string}) => {\r\n\r\n return (\r\n
\r\n
{`${props.divKey}: `}
\r\n {props.value}\r\n
\r\n );\r\n};\r\n\r\nexport default PopMessageDetailsDiv;","import '../../css/PopMessage.css'\r\nimport { useContext } from 'react';\r\nimport { IPopMessageContainerProps } from '../../interfaces/popMessageInterface'\r\nimport { AppContext } from '../context/AppContext';\r\nimport PopMessageDetailsDiv from './PopMessageDetailsDiv'\r\n\r\nconst PopMessageDetailsContainer = (props: IPopMessageContainerProps) => {\r\n const { assetNamesArr } = useContext(AppContext);\r\n const [assetNamesToDisplay] = assetNamesArr;\r\n \r\n return (\r\n
\r\n {props.type === \"general\" &&\r\n Object.entries(props.formData).map(([key,value]) => {\r\n if(key && typeof(value) === \"string\" && key !== \"profile\" && key !== \"state\") {\r\n return \r\n }\r\n })\r\n }\r\n {props.type === \"load-sensor\" &&\r\n <> \r\n {(props.formData.loadSensorId && props.formData.assetName) &&\r\n <>\r\n \r\n \r\n \r\n }\r\n
more data:
\r\n {props.loadSensorData && Object.entries(props.loadSensorData).map(([key,value]) => {\r\n if(key && key !== \"assetName\") {\r\n return \r\n }\r\n })}\r\n \r\n\r\n }\r\n
\r\n );\r\n};\r\n\r\n\r\nexport default PopMessageDetailsContainer;","import '../../css/PopMessage.css'\r\nimport {useContext, useEffect} from 'react';\r\nimport {IPopMessageProps} from '../../interfaces/popMessageInterface'\r\nimport {AppContext} from '../context/AppContext';\r\nimport PopMessageDetailsContainer from './PopMessageDetailsContainer'\r\nimport PopMessageDetailsDiv from './PopMessageDetailsDiv';\r\n\r\nconst PopMessage = (props: IPopMessageProps) => {\r\n const {loaderProgress, loaderTotal} = props;\r\n const {disMessage} = useContext(AppContext);\r\n const [displayMessage]: string[] = disMessage;\r\n const [, setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n\r\n useEffect(() => {\r\n if (displayMessage === \"done\") {\r\n setTimeout(() => {\r\n setDisplayMessage(\"none\");\r\n }, 1500)\r\n }\r\n }, [displayMessage]);\r\n\r\n function onClose() {\r\n setDisplayMessage(\"none\");\r\n }\r\n\r\n return (\r\n
\r\n {\r\n displayMessage === \"asset-details\" &&\r\n
\r\n \r\n \r\n \r\n
\r\n Asset Details\r\n
\r\n \r\n
Are you Sure?
\r\n \r\n
\r\n }\r\n {\r\n displayMessage === \"processing\" &&\r\n
\r\n

Processing your request...

\r\n {Boolean(loaderProgress && loaderTotal) &&\r\n

finished process {loaderProgress} out of {loaderTotal} ...

\r\n }\r\n \"spinner\"/\r\n
\r\n }\r\n {\r\n displayMessage === \"done\" &&\r\n
\r\n

Done!

\r\n \r\n
\r\n }\r\n {\r\n displayMessage === \"error\" &&\r\n
\r\n \r\n \r\n \r\n {props.type !== \"bulk\" ?\r\n
\r\n

{props.errorTitle || \"Error\"}

\r\n
{props.error}
\r\n {props.errorDescription &&

\r\n We're sorry, but we couldn't register your tracker. Possible reasons:
\r\n   1. No cellular coverage in your area
\r\n   2. Batteries were not inserted correctly

\r\n Note: It may take a few minutes for tracker to start communicating after battery insertion.\r\n\r\n

}\r\n
\r\n :\r\n
\r\n
{props.error}
\r\n {props.errorList?.map((errorElement, i) => {\r\n if (errorElement.elementName && errorElement.errorDescription) {\r\n return \r\n }\r\n })}\r\n
\r\n }\r\n
\r\n }\r\n {\r\n displayMessage === \"info\" &&\r\n
\r\n \r\n \r\n \r\n
\r\n

Info

\r\n
{props.error}
\r\n\r\n
\r\n
\r\n }\r\n {\r\n displayMessage === \"rename-successful\" &&\r\n
\r\n

Rename asset completed successfully

\r\n \r\n
\r\n }\r\n {\r\n displayMessage === \"deviceId-edit-error\" &&\r\n
\r\n
{`Device ID already assigned to asset \"${props.assetInfoOfNewId?.assetName}\".`}
\r\n
{`Do you wish to reassign it?`}
\r\n
\r\n \r\n \r\n\r\n
\r\n
\r\n }\r\n {\r\n displayMessage === \"deviceId-reassigned\" &&\r\n
\r\n

Done!

\r\n \r\n
\r\n }\r\n {\r\n displayMessage === \"bulk-load\" &&\r\n
\r\n \r\n \r\n \r\n
\r\n File details\r\n
\r\n
\r\n {props.formData.fileName &&\r\n \r\n }\r\n
\r\n
Are you Sure you want to upload this file?
\r\n \r\n
\r\n }\r\n {\r\n displayMessage === \"add-update-location\" &&\r\n
\r\n \r\n \r\n \r\n {(props.formData.fileNamesList && props.formData.fileNamesList.length !== 0) &&\r\n <>\r\n
\r\n File details\r\n
\r\n
\r\n \r\n
    \r\n {props.formData.fileNamesList.map((name) => {\r\n return
  • {name}
  • \r\n })}\r\n
\r\n {props.type !== \"\" &&\r\n \r\n }\r\n
\r\n \r\n\r\n }\r\n \r\n Are you Sure you want to upload this file?\r\n
\r\n \r\n
\r\n }\r\n {\r\n displayMessage === \"add-update-location-error\" &&\r\n
\r\n \r\n \r\n \r\n
\r\n {props.messageStatus ?\r\n

Add/Update Successfully

\r\n :\r\n

Error

\r\n }\r\n
{props.error}
\r\n {\r\n props.errorList?.map((errorElement) => {\r\n if (errorElement.elementName && errorElement.errorDescription) {\r\n return \r\n }\r\n })\r\n }\r\n
\r\n\r\n
\r\n }\r\n {\r\n displayMessage === \"warning\" &&\r\n
\r\n \r\n \r\n \r\n
\r\n

Warning

\r\n
{\"Device can only be waken-up using knock mechanism, or by power reset\"}
\r\n\r\n
\r\n\r\n
\r\n }\r\n \r\n );\r\n};\r\n\r\n\r\nexport default PopMessage;","import '../css/NavBar.css';\r\nimport { NavLink } from \"react-router-dom\";\r\nimport { AppContext } from './context/AppContext';\r\nimport { useContext } from 'react';\r\nimport { IAuth } from '../interfaces/interface';\r\n\r\nfunction NavBar() {\r\n const { linksDisable, navBarStatus, login, authorization } = useContext(AppContext);\r\n const [disableLinks]: string[] = linksDisable\r\n const [, setIsNavbarOpen] = navBarStatus;\r\n const [, setIsLogged] = login;\r\n const [,setAuth]: React.Dispatch>[] = authorization;\r\n const [auth]: IAuth[] = authorization;\r\n\r\n\r\n const clickHandler = (e:any) => {\r\n setIsNavbarOpen(false)\r\n if(disableLinks.includes(e.currentTarget.id)){\r\n e.preventDefault()\r\n } \r\n \r\n }\r\n const signOutClickHandler = () => {\r\n setIsLogged(false)\r\n setAuth({\r\n username: \"\",\r\n token: \"\",\r\n expiresOn: \"\",\r\n scope: \"\",\r\n header:{\r\n headers: {\r\n Authorization: ``\r\n }\r\n }\r\n })\r\n }\r\n return (\r\n
\r\n
\r\n hoopo logo \r\n {auth.username}\r\n
\r\n\r\n\r\n
\r\n
\r\n venn-diagram\r\n Tracker Registration\r\n
\r\n
\r\n navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}\r\n to={'/registration-single-tracker'}\r\n id='registration-single-tracker'\r\n onClick={clickHandler}\r\n >\r\n Single tracker\r\n \r\n \r\n navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}\r\n to={'/bulk-registration'}\r\n id='bulk-registration'\r\n onClick={clickHandler}\r\n >\r\n Bulk registration\r\n \r\n \r\n
\r\n\r\n\r\n
\r\n venn-diagram \r\n Activation and Association\r\n
\r\n
\r\n navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}\r\n to={'/single-tracker-activation'}\r\n id='single-tracker-activation'\r\n onClick={clickHandler}\r\n >\r\n Single Tracker\r\n \r\n \r\n {/* navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}*/}\r\n {/* to={'/load-sensor'}*/}\r\n {/* id='Load Sensor'*/}\r\n {/* onClick={clickHandler}*/}\r\n {/*>*/}\r\n {/* Load Sensor*/}\r\n {/* */}\r\n {/**/}\r\n navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}\r\n to={'/bulk-activation'}\r\n id='bulk-activation'\r\n onClick={clickHandler}\r\n >\r\n Bulk activation\r\n \r\n \r\n
\r\n\r\n\r\n
\r\n venn-diagram \r\n Manage\r\n
\r\n
\r\n navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}\r\n to={'/view-edit-asset'}\r\n id='View-Edit-Asset'\r\n onClick={clickHandler}\r\n >\r\n View / Edit Asset\r\n \r\n \r\n navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}\r\n to={'/replace-batteries'}\r\n id='Replace-Batteries'\r\n onClick={clickHandler}\r\n >\r\n Replace Batteries\r\n \r\n \r\n navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}\r\n to={'/replace-tracker'}\r\n id='Replace-Tracker'\r\n onClick={clickHandler}\r\n >\r\n Replace Tracker\r\n \r\n \r\n navData.isActive ? 'nav-bar-link-container nav-bar-activ' : 'nav-bar-link-container'}\r\n to={'/load-polygons'}\r\n id='Load-Polygons'\r\n onClick={clickHandler}\r\n >\r\n Load Polygons\r\n \r\n \r\n
\r\n
\r\n
\r\n sign out \r\n Sign out\r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default NavBar;\r\n","import { useContext } from 'react';\r\nimport { AppContext } from './context/AppContext';\r\nimport NavBar from './NavBar';\r\n\r\nfunction HeaderTemplate({title}:{title:string}) {\r\n const { navBarStatus, disMessage, navBarHandler } = useContext(AppContext);\r\n const [displayMessage]: string[] = disMessage;\r\n const [isNavbarOpen] = navBarStatus;\r\n const navBarClickHandler: (e: any) => void = navBarHandler\r\n\r\n return (\r\n <>\r\n {isNavbarOpen && \r\n \r\n \r\n \r\n }\r\n
\r\n
\r\n {!isNavbarOpen &&\r\n \r\n \r\n \r\n }\r\n \r\n hoopo logo \r\n \r\n
\r\n
\r\n {title}\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default HeaderTemplate;","import '../../css/App.css'\r\nimport '../../css/PageTemplate.css'\r\nimport {useContext, useEffect} from 'react'\r\nimport {AppContext} from \"../context/AppContext\";\r\nimport {AddAssetContext} from \"../context/AddAssetContext\";\r\nimport {IAddAssetForm, IAddAssetFormValidation, IConfiguration, IAuth} from '../../interfaces/interface';\r\nimport {IMessageSender, IMessageErrorResponse} from '../../interfaces/messageInterface';\r\nimport AddAssetForm from './AddAssetForm'\r\nimport PopMessage from '../PopMessage/PopMessage';\r\nimport axios from 'axios';\r\nimport HeaderTemplate from '../HeaderTemplate';\r\n\r\nfunction AddAsset() {\r\n\r\n const {aAForm, formVal, defaultValueSelect, valueSelect, errMessage} = useContext(AddAssetContext);\r\n const {\r\n navBarStatus,\r\n config,\r\n authorization,\r\n disMessage,\r\n navBarHandler,\r\n errorHandlerFunction\r\n } = useContext(AppContext);\r\n const [auth]: IAuth[] = authorization;\r\n const [isNavbarOpen] = navBarStatus;\r\n const navBarClickHandler: (e: any) => void = navBarHandler\r\n const [, setConfiguration]: React.Dispatch>[] = config;\r\n const [configuration]: IConfiguration[] = config\r\n const [formInput]: IAddAssetForm[] = aAForm;\r\n const [, setFormInput]: React.Dispatch>[] = aAForm;\r\n const [displayMessage]: string[] = disMessage;\r\n const [, setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [formFieldsValid]: IAddAssetFormValidation[] = formVal;\r\n const [, setFormFieldsValid]: React.Dispatch>[] = formVal;\r\n const [, setDefaultSelectValue]: React.Dispatch>[] = defaultValueSelect;\r\n const [, setSelectValue]: React.Dispatch>[] = valueSelect;\r\n const [errorMessage]: string[] = errMessage;\r\n const [, setErrorMessage]: React.Dispatch>[] = errMessage;\r\n const errorHandler: (status: number) => string = errorHandlerFunction;\r\n\r\n\r\n const addAssetHandler = (): void => {\r\n console.log(formInput);\r\n\r\n let messageBody: IMessageSender = {\r\n type: 'addAsset',\r\n userId: auth.username,\r\n assetInfo: formInput\r\n }\r\n setDisplayMessage(\"processing\");\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\") {\r\n setDisplayMessage(\"done\");\r\n setFormInput({\r\n assetName: \"\",\r\n deviceId: \"\",\r\n assetType: \"\",\r\n assetDescription: \"\",\r\n profile: \"\",\r\n state: \"\"\r\n })\r\n setSelectValue(\"\")\r\n setDefaultSelectValue(\"\")\r\n let tempFormFieldsValid = formFieldsValid\r\n Object.entries(formFieldsValid).forEach(([key, value]) => {\r\n if (key === \"assetName\" || key === \"deviceId\" ||\r\n key === \"assetType\" || key === \"assetDescription\"\r\n ) {\r\n tempFormFieldsValid[key] = {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n }\r\n })\r\n setFormFieldsValid(tempFormFieldsValid)\r\n } else {\r\n if (res.data.errorDescription.startsWith(\"Asset name\")) {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName: {\r\n isValid: false,\r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n setDisplayMessage(\"none\");\r\n } else if (res.data.errorDescription.startsWith(\"Device\")) {\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId: {\r\n isValid: false,\r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n setDisplayMessage(\"none\");\r\n } else {\r\n setErrorMessage(res.data.errorDescription)\r\n setDisplayMessage(\"error\");\r\n }\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n if (!configuration.assetTypes.includes(formInput.assetType)) {\r\n setConfiguration({\r\n ...configuration,\r\n assetTypes: [...configuration.assetTypes, formInput.assetType]\r\n })\r\n\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n {\r\n displayMessage !== \"processing\" &&\r\n \r\n \r\n
\r\n }\r\n {displayMessage !== \"none\" &&\r\n
\r\n \r\n
\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default AddAsset;\r\n\r\n\r\n","import React, { useState, createContext } from \"react\";\r\nimport { IAssetInfo, IViewEditForm, IViewEditSelectValue } from \"../../interfaces/interface\";\r\n\r\nexport const ViewEditAssetContext = createContext({});\r\n\r\nexport const ViewEditAssetProvider: React.FC = (props) => {\r\n const [formInput, setFormInput] = useState({\r\n assetName: \"\",\r\n deviceId: \"\",\r\n loadSensorId: \"\",\r\n assetType: \"\",\r\n assetDescription: \"\",\r\n profile: \"\",\r\n state: \"\",\r\n });\r\n const [formInputEdit, setFormInputEdit] = useState({\r\n assetName: \"\",\r\n deviceId: \"\",\r\n loadSensorId: \"\",\r\n assetType: \"\",\r\n assetDescription: \"\",\r\n profile: \"\",\r\n state: \"\",\r\n });\r\n const [formFieldsValid, setFormFieldsValid] = useState({\r\n assetName: {\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n deviceId: {\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n assetType: {\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n \r\n });\r\n const [defaultSelectValue, setDefaultSelectValue] = useState(\"\");\r\n const [selectValueObj, setSelectValueObj] = useState({\r\n type: \"\",\r\n newType: \"\",\r\n profile: \"\",\r\n state: \"\",\r\n\r\n });\r\n const [profileSelectValue, setProfileSelectValue] = useState(\"\");\r\n const [selectValue, setSelectValue] = useState(\"\");\r\n const [errorMessage, setErrorMessage] =useState(\"\")\r\n const [assetInfoOfNewId, setAssetInfoOfNewId] = useState({\r\n assetName: \"\",\r\n deviceId: \"\",\r\n })\r\n const [isFieldEnable,setIsFieldEnable] = useState({\r\n assetName: {field :true, edit: false},\r\n deviceId: {field :true, edit: false},\r\n assetType: {field :false, edit: false},\r\n assetDescription:{field :false, edit: false},\r\n profile:{field :false, edit: false},\r\n state:{field :false, edit: false},\r\n });\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n","import '../../css/App.css'\r\nimport '../../css/FormTemplate.css'\r\nimport React, { useContext, useEffect, useState } from 'react'\r\nimport axios from 'axios';\r\nimport { AppContext } from '../context/AppContext';\r\nimport { IAuth, IConfiguration, IViewEditForm, IViewEditFormValidation, IViewEditSelectValue } from '../../interfaces/interface';\r\nimport { IMessageResponse, IMessageSender, IMessageErrorResponse } from '../../interfaces/messageInterface';\r\nimport { ViewEditAssetContext } from '../context/ViewEditAssetContext';\r\nimport FormInternalDivTemplate from '../formTemplate/FormInternalDivTemplate';\r\nimport FormSubmitButton from '../formTemplate/FormSubmitButton';\r\nimport FormEditImg from '../formTemplate/FormEditImg';\r\nimport FormErrorDivTemplate from '../formTemplate/FormErrorDivTemplate';\r\n\r\nfunction ViewEditAssetForm() {\r\n const { navBarStatus, config, authorization, disMessage, errorHandlerFunction } = useContext(AppContext); \r\n const { form, formVal, formEdit, errMessage, newIdAssetInfo, fieldEnable, valueSelectObj } = useContext(ViewEditAssetContext); \r\n const [isNavbarOpen] = navBarStatus;\r\n const [configuration] :IConfiguration[] = config;\r\n const [,setConfiguration] :React.Dispatch>[] = config;\r\n const [ auth ]: IAuth[] = authorization;\r\n const [formInput]: IViewEditForm[] = form; \r\n const [,setFormInput]: React.Dispatch>[] = form;\r\n const [formInputEdit]: IViewEditForm[] = formEdit; \r\n const [,setFormInputEdit]: React.Dispatch>[] = formEdit;\r\n const [displayMessage]: string[] = disMessage;\r\n const [,setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [formFieldsValid]:IViewEditFormValidation[] = formVal;\r\n const [,setFormFieldsValid]:React.Dispatch>[] = formVal;\r\n const [addNewType, setAddNewType] = useState(false);\r\n const [assetNamesArr, setAssetNamesArr] = useState([]);\r\n const [deviceIdArr, setDeviceIdArr] = useState([]);\r\n const [allowEdit, setAllowEdit] = useState(false);\r\n const [isFieldEnable,setIsFieldEnable] = fieldEnable;\r\n const [, setAssetInfoOfNewId] = newIdAssetInfo;\r\n const [errorMessage]:string[] = errMessage;\r\n const [,setErrorMessage]: React.Dispatch>[] = errMessage;\r\n const errorHandler: (status: number) => string = errorHandlerFunction; \r\n const [selectValueObj]: IViewEditSelectValue[] = valueSelectObj;\r\n const [, setSelectValueObj]: React.Dispatch>[] = valueSelectObj;\r\n useEffect(() => {\r\n if(displayMessage === \"done\"){\r\n clearFields();\r\n }\r\n },[displayMessage])\r\n\r\n useEffect(() => {\r\n if(allowEdit === false){\r\n setFormInput({...formInput,\r\n deviceId: \"\",\r\n loadSensorId: \"\",\r\n assetType: \"\",\r\n assetDescription: \"\",\r\n profile: \"\",\r\n state: \"\",\r\n });\r\n setSelectValueObj({\r\n type: \"\",\r\n newType: \"\",\r\n profile: \"\",\r\n state: \"\",\r\n })\r\n setAddNewType(false)\r\n }\r\n },[allowEdit])\r\n\r\n const clearFields = ():void => {\r\n setFormInput({\r\n assetName: \"\",\r\n deviceId: \"\",\r\n assetType: \"\",\r\n assetDescription: \"\",\r\n profile: \"\"\r\n })\r\n setFormInputEdit({\r\n assetName: \"\",\r\n deviceId: \"\",\r\n loadSensorId: \"\",\r\n assetType: \"\",\r\n assetDescription: \"\",\r\n profile: \"\"\r\n })\r\n setSelectValueObj({\r\n type: \"\",\r\n newType: \"\",\r\n profile: \"\",\r\n state: \"\",\r\n })\r\n let tempFormFieldsValid = formFieldsValid\r\n Object.entries(formFieldsValid).forEach(([key, value])=> {\r\n if(key === \"assetName\" || key === \"deviceId\" ||\r\n key === \"assetType\"\r\n ){\r\n tempFormFieldsValid[key]= {\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n }\r\n })\r\n setFormFieldsValid(tempFormFieldsValid)\r\n setAllowEdit(false)\r\n setIsFieldEnable({\r\n assetName: {field :true, edit: false},\r\n deviceId: {field :true, edit: false},\r\n assetType: {field :false, edit: false},\r\n assetDescription:{field :false, edit: false}, \r\n profile:{field :false, edit: false}, \r\n state:{field :false, edit: false} \r\n })\r\n setAssetNamesArr([])\r\n setDeviceIdArr([])\r\n setAddNewType(false)\r\n setAssetInfoOfNewId({\r\n assetName: \"\",\r\n deviceId: \"\",\r\n })\r\n }\r\n const isDisabled = (): boolean => {\r\n if(displayMessage !== \"none\" || isNavbarOpen === true) return true\r\n return false\r\n }\r\n const submitHandler = (e: React.FormEvent) => {\r\n e.preventDefault(); \r\n if(formValidation()){\r\n setDisplayMessage(\"asset-details\");\r\n }\r\n }\r\n const formValidation = ():boolean => {\r\n if(!allowEdit) return false;\r\n // if((formInput.assetType === formInputEdit.assetType) && \r\n // (formInput.assetDescription === formInputEdit.assetDescription) &&\r\n // (formInput.deviceId === formInputEdit.deviceId)&&\r\n // (formInput.profile === formInputEdit.profile)&&\r\n // (formInput.state === formInputEdit.state)&&\r\n // (formInput.state !== \"Sleep\")){\r\n // setErrorMessage(\"no changes have been made, no update required\")\r\n // setDisplayMessage(\"info\");\r\n // return false ;\r\n // }\r\n if(formInputEdit.assetType === \"\"){\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetType: {\r\n displayMessage: true,\r\n message: \"Field cannot be empty\"\r\n }\r\n })\r\n return false;\r\n }\r\n if(formInputEdit.deviceId === \"\"){\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId: {\r\n displayMessage: true,\r\n message: \"Field cannot be empty\"\r\n }\r\n })\r\n return false;\r\n }\r\n if(formFieldsValid.deviceId.displayMessage){\r\n return false;\r\n }\r\n let tempFormInputEdit = {...formInputEdit}\r\n if(tempFormInputEdit.assetHomeLocation === \"\"){\r\n delete tempFormInputEdit.assetHomeLocation\r\n }\r\n if(tempFormInputEdit.loadSensorId === \"\"){\r\n delete tempFormInputEdit.loadSensorId\r\n }\r\n setFormInputEdit({...tempFormInputEdit})\r\n return true;\r\n \r\n } \r\n const descriptionChangeHandler = (e:React.ChangeEvent):void => {\r\n let input = e.target.value;\r\n if(!(/'/.test(input)) && !(/\"/.test(input)) && !(/`/.test(input))){ \r\n setFormInputEdit({\r\n ...formInputEdit,\r\n assetDescription: input,\r\n });\r\n }\r\n };\r\n const assetNameChangeHandler = (e:React.ChangeEvent):void => {\r\n let input = e.target.value;\r\n if(!(/'/.test(input)) && !(/\"/.test(input)) && !(/`/.test(input))){ \r\n if(!isFieldEnable.assetName.edit){\r\n setFormInput({...formInput,\r\n assetName: input\r\n });\r\n if(input.length >= 3){ \r\n let messageBody:IMessageSender = {\r\n type: 'getAssetNames',\r\n userId: auth.username,\r\n data: input\r\n }\r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => { \r\n if(res.data.status === \"OK\"){\r\n setAssetNamesArr(res.data.names)\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n }) \r\n isDeviceIncludes(res.data.names, input, \"assetName\");\r\n }else{\r\n setAssetNamesArr([])\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }else{\r\n setAssetNamesArr([])\r\n }\r\n setAllowEdit(false);\r\n }else{\r\n setFormInputEdit({\r\n ...formInputEdit,\r\n assetName: input,\r\n });\r\n }\r\n }\r\n };\r\n const typeBlurHandler = (e: React.FocusEvent) => {\r\n if(e.target.value !== \"\"){\r\n let tempAssetTypes = configuration.assetTypes;\r\n tempAssetTypes.push(e.target.value);\r\n setSelectValueObj({\r\n ...selectValueObj,\r\n type: e.target.value,\r\n newType: \"\"\r\n })\r\n setConfiguration({\r\n ...configuration,\r\n assetTypes: [...tempAssetTypes]\r\n });\r\n setFormInputEdit({\r\n ...formInputEdit,\r\n assetType: e.target.value,\r\n }); \r\n }\r\n setAddNewType(false);\r\n }\r\n const selectChangeHandler = (e: React.ChangeEvent):void => {\r\n if(e.target.value === \"addNewType\"){\r\n setAddNewType(true);\r\n setFormInputEdit({\r\n ...formInputEdit,\r\n assetType: \"\"\r\n })\r\n }else{ \r\n setFormInputEdit({\r\n ...formInputEdit,\r\n assetType: e.target.value,\r\n });\r\n if(e.target.value !== \"\"){\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetType:{\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n } \r\n };\r\n const assetTypeEditChangeHandler = (e: React.ChangeEvent):void => {\r\n let input = e.target.value;\r\n if(!(/'/.test(input)) && !(/\"/.test(input)) && !(/`/.test(input))){ \r\n setSelectValueObj({\r\n ...selectValueObj,\r\n newType: input,\r\n }); \r\n }\r\n }\r\n const deviceIdChangeHandler = (e:React.ChangeEvent):void => {\r\n let input = e.target.value.toUpperCase();\r\n if (/^[0-9a-fA-F]+$/.test(input) || input === \"\") {\r\n if(!isFieldEnable.deviceId.edit){\r\n setFormInput({\r\n ...formInput,\r\n deviceId: input\r\n })\r\n if(input.length >= 3){\r\n let messageBody:IMessageSender = {\r\n type: 'getDeviceIDs',\r\n userId: auth.username,\r\n deviceIdFilter: {\r\n Type: \"All Trackers\",\r\n Pattern: input,\r\n }\r\n }\r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => { \r\n if(res.data.status === \"OK\"){\r\n setDeviceIdArr(res.data.names)\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId:{\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n isDeviceIncludes(res.data.names, input, \"deviceId\");\r\n }else{\r\n setDeviceIdArr([])\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId:{\r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }else{\r\n setDeviceIdArr([])\r\n }\r\n }else{\r\n setFormInputEdit({\r\n ...formInputEdit,\r\n deviceId: input\r\n })\r\n if(input.length >= 3){\r\n let messageBody:IMessageSender = {\r\n type: 'getDeviceIDs',\r\n userId: auth.username,\r\n deviceIdFilter: {\r\n Type: \"All Trackers\",\r\n Pattern: input,\r\n }\r\n }\r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => { \r\n if(res.data.status === \"OK\"){\r\n setDeviceIdArr(res.data.names)\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId:{\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n isDeviceIncludesInEdit(res.data.names, input);\r\n }else{\r\n setDeviceIdArr([])\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId:{\r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }else{\r\n setDeviceIdArr([])\r\n }\r\n }\r\n };\r\n }\r\n const isDeviceIncludes = (deviceArr:string[], input:string, type:string):void => {\r\n if(deviceArr.includes(input) && (type === \"deviceId\" || type === \"assetName\")){\r\n const messageBody:IMessageSender = {\r\n type: 'getAssetInfo',\r\n userId: auth.username,\r\n assetInfo: {\r\n [type]: input\r\n }\r\n } \r\n axios.post('/message',messageBody, auth.header\r\n ).then(({ data }: {data :IMessageResponse}) =>{\r\n if(data.status === \"OK\"){ \r\n let assetInfo = data.assetInfo\r\n console.log(assetInfo);\r\n \r\n setFormInput({\r\n ...formInput,\r\n ...assetInfo\r\n })\r\n setFormInputEdit({\r\n ...formInput,\r\n ...assetInfo\r\n })\r\n setSelectValueObj({\r\n type: assetInfo.assetType? assetInfo.assetType : \"\", \r\n newType: assetInfo.assetType? assetInfo.assetType : \"\", \r\n profile: assetInfo.profile? assetInfo.profile : \"\", \r\n state: assetInfo.state? assetInfo.state : \"\" \r\n }) \r\n setFormFieldsValid({\r\n assetName: {\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n deviceId: {\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n assetType: {\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n })\r\n setAllowEdit(true)\r\n }else{\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n [type]:{\r\n displayMessage: true,\r\n message: data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }else{\r\n setIsFieldEnable({\r\n assetName: {field :true, edit: false},\r\n deviceId: {field :true, edit: false},\r\n assetType: {field :false, edit: false},\r\n assetDescription:{field :false, edit: false}, \r\n profile:{field :false, edit: false}, \r\n state:{field :false, edit: false} \r\n })\r\n }\r\n }\r\n const isDeviceIncludesInEdit = (deviceArr:string[], input:string) => {\r\n if(deviceArr.includes(input)){\r\n const messageBody:IMessageSender = {\r\n type: 'getAssetInfo',\r\n userId: auth.username,\r\n assetInfo: {\r\n deviceId: input\r\n }\r\n } \r\n axios.post('/message',messageBody, auth.header\r\n ).then(({ data }: {data :IMessageResponse}) =>{\r\n if(data.status === \"OK\"){\r\n if(data.assetInfo.assetName !== \"\" && data.assetInfo.assetName !== formInput.assetName){\r\n setAssetInfoOfNewId({...data.assetInfo})\r\n setDisplayMessage(\"deviceId-edit-error\")\r\n } \r\n }else{\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n deviceId:{\r\n displayMessage: true,\r\n message: data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }\r\n }\r\n const editClickHandler = (e: any):void => {\r\n if(allowEdit){\r\n const targetId:string = e.target.id.slice(4)\r\n if(targetId === \"assetType\" || targetId === \"assetDescription\" ||\r\n targetId === \"deviceId\"|| targetId === \"profile\"|| targetId === \"state\"){\r\n if(isFieldEnable[targetId].edit) {\r\n setIsFieldEnable({\r\n ...isFieldEnable,\r\n [targetId]: {\r\n field: false,\r\n edit: false\r\n }\r\n })\r\n }else{\r\n setIsFieldEnable({\r\n ...isFieldEnable,\r\n [targetId]: {\r\n field: true,\r\n edit: true\r\n }\r\n })\r\n } \r\n }\r\n if(targetId === \"assetName\"){\r\n if(isFieldEnable[targetId].edit) {\r\n setIsFieldEnable({\r\n ...isFieldEnable,\r\n [targetId]: {\r\n field: true,\r\n edit: false\r\n }\r\n })\r\n }else{\r\n setIsFieldEnable({\r\n ...isFieldEnable,\r\n [targetId]: {\r\n field: true,\r\n edit: true\r\n }\r\n })\r\n } \r\n }\r\n }\r\n }\r\n const editAssetNameButtonHandler = (e:any):void => {\r\n if(formInputEdit.assetName !== formInput.assetName){\r\n let operation:string;\r\n if(e.target.name === \"rename-and-keep-button\"){\r\n operation = \"rename\"\r\n }else{\r\n operation = \"keep\"\r\n }\r\n let messageBody:IMessageSender = {\r\n type: 'renameAsset',\r\n userId: auth.username,\r\n renameAsset: {\r\n oldAssetName: formInput.assetName,\r\n newAssetName: formInputEdit.assetName,\r\n operation: operation\r\n }\r\n }\r\n try{\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => {\r\n if(res.data.status === \"OK\"){\r\n setFormInput({\r\n ...formInput,\r\n assetName: formInputEdit.assetName\r\n })\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n setDisplayMessage(\"rename-successful\")\r\n setIsFieldEnable({\r\n ...isFieldEnable,\r\n assetName: {\r\n field: true,\r\n edit: false\r\n }\r\n })\r\n setTimeout(() => {\r\n setDisplayMessage(\"none\")\r\n },1000)\r\n }else{\r\n if (res.data.errorDescription) {\r\n alert(\"ERROR:\\n\"+res.data.errorDescription);\r\n }\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n displayMessage: true,\r\n message: errorMessage\r\n }\r\n })\r\n \r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status);\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }catch{\r\n \r\n throw new Error(\"The server is unavailable at this moment. please try again later...\");\r\n }\r\n }else{\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n displayMessage: true,\r\n message: \"No changes have been made\"\r\n }\r\n })\r\n }\r\n \r\n }\r\n\r\n const profileStateChangeHandler = (e: React.ChangeEvent):void => {\r\n setFormInputEdit({\r\n ...formInputEdit,\r\n [e.target.name]: e.target.value,\r\n })\r\n if(e.target.name === \"state\" && e.target.value === \"Sleep\"){\r\n setDisplayMessage(\"warning\")\r\n }\r\n }\r\nreturn (\r\n
\r\n
\r\n < FormInternalDivTemplate\r\n id=\"assetName\"\r\n label=\"Asset Name\"\r\n type=\"list\"\r\n value={isFieldEnable.assetName.edit?formInputEdit.assetName :formInput.assetName}\r\n maxLength={32}\r\n displayMessage={formFieldsValid.assetName.displayMessage}\r\n message={formFieldsValid.assetName.message}\r\n onChange={assetNameChangeHandler}\r\n listId=\"assetsNamesId\"\r\n array={assetNamesArr}\r\n disabled={isFieldEnable.assetName.field? isDisabled() : true}\r\n edit={isFieldEnable.assetName.edit}\r\n editClickHandler={editClickHandler}\r\n />\r\n {isFieldEnable.assetName.edit && \r\n
\r\n \r\n \r\n
\r\n\r\n }\r\n < FormInternalDivTemplate\r\n id=\"deviceId\"\r\n label=\"Tracker ID\"\r\n type=\"list\"\r\n value={isFieldEnable.deviceId.edit?formInputEdit.deviceId :formInput.deviceId}\r\n maxLength={8}\r\n displayMessage={formFieldsValid.deviceId.displayMessage}\r\n message={formFieldsValid.deviceId.message}\r\n onChange={deviceIdChangeHandler}\r\n listId=\"trackersId\"\r\n array={deviceIdArr}\r\n disabled={isFieldEnable.deviceId.field? isDisabled() : true}\r\n edit={isFieldEnable.deviceId.edit}\r\n editClickHandler={editClickHandler}\r\n />\r\n {(formInput.loadSensorId && formInput.loadSensorId !== \"\") &&\r\n < FormInternalDivTemplate\r\n id=\"loadSensor\"\r\n label=\"Load Sensor ID\"\r\n type=\"text\"\r\n value={formInput.loadSensorId}\r\n maxLength={8}\r\n disabled={true}\r\n errorSpace={true}\r\n />\r\n }\r\n
\r\n \r\n
\r\n {\r\n !addNewType?\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 < FormInternalDivTemplate\r\n id=\"assetDescription\"\r\n label=\"Description\"\r\n type=\"text\"\r\n value={formInputEdit.assetDescription}\r\n maxLength={64}\r\n onChange={descriptionChangeHandler}\r\n disabled={isFieldEnable.assetDescription.field? isDisabled() : true} \r\n edit={isFieldEnable.assetDescription.edit}\r\n editClickHandler={editClickHandler}\r\n errorSpace={true}\r\n />\r\n {\r\n configuration.profiles &&\r\n
\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n }\r\n {\r\n configuration.states &&\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 ViewEditAssetForm;","import '../../css/App.css'\r\nimport '../../css/PageTemplate.css'\r\nimport '../../css/ViewEditAsset.css'\r\nimport React, { useContext, useEffect } from 'react';\r\nimport { IAuth, IConfiguration, IViewEditForm, IViewEditFormValidation } from '../../interfaces/interface';\r\nimport { IMessageSender, IMessageErrorResponse } from '../../interfaces/messageInterface';\r\nimport { AppContext } from '../context/AppContext';\r\nimport HeaderTemplate from '../HeaderTemplate';\r\nimport ViewEditAssetForm from './ViewEditAssetForm';\r\nimport PopMessage from '../PopMessage/PopMessage';\r\nimport { ViewEditAssetContext } from '../context/ViewEditAssetContext';\r\nimport axios from 'axios';\r\n\r\nfunction ViewEditAsset() {\r\n const { navBarStatus, config, authorization, disMessage, navBarHandler, errorHandlerFunction } = useContext(AppContext);\r\n const { form, formEdit, errMessage, newIdAssetInfo, fieldEnable } = useContext(ViewEditAssetContext); \r\n const [ auth ]: IAuth[] = authorization;\r\n const [isNavbarOpen] = navBarStatus;\r\n const navBarClickHandler: (e: any) => void = navBarHandler\r\n const [displayMessage]: string[] = disMessage;\r\n const [configuration] :IConfiguration[] = config\r\n const [,setConfiguration] :React.Dispatch>[] = config\r\n const [formInput]: IViewEditForm[] = form; \r\n const [formInputEdit]: IViewEditForm[] = formEdit;\r\n const [,setFormInputEdit]: React.Dispatch>[] = formEdit; \r\n const [,setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [assetInfoOfNewId] = newIdAssetInfo;\r\n const [isFieldEnable,setIsFieldEnable] = fieldEnable;\r\n const [errorMessage]:string[] = errMessage;\r\n const [,setErrorMessage]: React.Dispatch>[] = errMessage;\r\n const errorHandler: (status: number) => string = errorHandlerFunction; \r\n\r\n useEffect(() => {\r\n setDisplayMessage(\"none\")\r\n },[])\r\n \r\n const viewEditAssetHandler = () => {\r\n let messageBody:IMessageSender = {\r\n type: 'updateAsset',\r\n userId: auth.username,\r\n assetInfo: formInputEdit\r\n }\r\n setDisplayMessage(\"processing\");\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => {\r\n if(res.data.status === \"OK\"){\r\n setDisplayMessage(\"done\");\r\n }else{\r\n setErrorMessage(res.data.errorDescription)\r\n setDisplayMessage(\"error\");\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n if(!configuration.assetTypes.includes(formInput.assetType)){\r\n setConfiguration({\r\n ...configuration,\r\n assetTypes: [...configuration.assetTypes, formInput.assetType]\r\n })\r\n\r\n }\r\n }\r\n const deviceIdReplaceHandler = (e :any):void => {\r\n if(e.target.id === \"confirm-button\"){\r\n let messageBody:IMessageSender = {\r\n type: 'detachAsset',\r\n userId: auth.username,\r\n assetInfo: {...assetInfoOfNewId}\r\n } \r\n setDisplayMessage(\"processing\");\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => {\r\n if(res.data.status === \"OK\"){\r\n setDisplayMessage(\"deviceId-reassigned\");\r\n setTimeout(() => {\r\n setDisplayMessage(\"none\")\r\n },1000)\r\n }else{\r\n setErrorMessage(res.data.errorDescription)\r\n setDisplayMessage(\"error\");\r\n setIsFieldEnable({\r\n ...isFieldEnable,\r\n deviceId: {field :false, edit: false},\r\n })\r\n setFormInputEdit({\r\n ...formInputEdit,\r\n deviceId: formInput.deviceId\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }else{\r\n setIsFieldEnable({\r\n ...isFieldEnable,\r\n deviceId: {field :false, edit: false},\r\n })\r\n setFormInputEdit({\r\n ...formInputEdit,\r\n deviceId: formInput.deviceId\r\n })\r\n setDisplayMessage(\"none\");\r\n }\r\n }\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n {displayMessage !== \"none\" && \r\n
\r\n \r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default ViewEditAsset;\r\n\r\n","import React, { useState, createContext } from \"react\";\r\nimport { IReplaceTrackerForm, IReplaceTrackerFormValidation } from \"../../interfaces/interface\";\r\n\r\nexport const ReplaceTrackerContext = createContext({});\r\n\r\nexport const ReplaceTrackerProvider: React.FC = (props) => {\r\n const [formInput, setFormInput] = useState({\r\n assetName: \"\",\r\n assetType: \"\",\r\n oldDeviceId: \"\",\r\n newDeviceId: \"\",\r\n oldDeviceIdStatus:\"\",\r\n });\r\n \r\n const [formFieldsValid, setFormFieldsValid] = useState({\r\n assetName: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n assetType: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n oldDeviceId: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n newDeviceId: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n oldDeviceIdStatus: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n });\r\n const [errorMessage, setErrorMessage] =useState(\"\")\r\n const [filedBlock, setFieldBlock] = useState(false);\r\n const [defaultSelect, setDefaultSelect] = useState(\"\")\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n","import '../../css/AddLoadSensorForm.css';\r\nimport axios from 'axios';\r\nimport React, { useContext, useState } from 'react';\r\nimport { IAuth, IConfiguration, IReplaceTrackerForm, IReplaceTrackerFormValidation } from '../../interfaces/interface';\r\nimport { IMessageResponse, IMessageSender, IMessageErrorResponse } from '../../interfaces/messageInterface';\r\nimport { AppContext } from '../context/AppContext';\r\nimport { ReplaceTrackerContext } from '../context/ReplaceTrackerContext';\r\nimport FormInternalDivTemplate from '../formTemplate/FormInternalDivTemplate';\r\nimport FormSubmitButton from '../formTemplate/FormSubmitButton';\r\nimport FormErrorDivTemplate from '../formTemplate/FormErrorDivTemplate';\r\nimport FormTemplateLabel from '../formTemplate/FormTemplateLabel';\r\nfunction ReplaceTrackerForm() {\r\n const { navBarStatus, config, authorization, disMessage, errorHandlerFunction } = useContext(AppContext); \r\n const { Form, formVal, errMessage, blockField, selectDefault } = useContext(ReplaceTrackerContext); \r\n const [isNavbarOpen] = navBarStatus;\r\n const [configuration] :IConfiguration[] = config\r\n const [ auth ]: IAuth[] = authorization;\r\n const [formInput]: IReplaceTrackerForm[] = Form; \r\n const [,setFormInput]: React.Dispatch>[] = Form;\r\n const [displayMessage]: string[] = disMessage;\r\n const [,setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [formFieldsValid]:IReplaceTrackerFormValidation[] = formVal;\r\n const [,setFormFieldsValid]:React.Dispatch>[] = formVal;\r\n const [assetNamesArr, setAssetNamesArr] = useState([]);\r\n const [oldDeviceIdArr, setOldDeviceIdArr] = useState([]);\r\n const [newDeviceIdArr, setNewDeviceIdArr] = useState([]);\r\n const [defaultSelect, setDefaultSelect] = selectDefault\r\n const [filedBlock, setFieldBlock] = blockField;\r\n const [,setErrorMessage]: React.Dispatch>[] = errMessage;\r\n const errorHandler: (status: number) => string = errorHandlerFunction; \r\n\r\n const isDisabled = (): boolean => {\r\n if(displayMessage !== \"none\" || isNavbarOpen === true) return true\r\n return false\r\n }\r\n const submitHandler = (e: React.FormEvent) => {\r\n e.preventDefault(); \r\n console.log(formInput);\r\n \r\n if(formValidation()){\r\n setDisplayMessage(\"asset-details\");\r\n }\r\n }\r\n const formValidation = ():boolean => {\r\n let isValid = true\r\n let tempFormFieldsValid = {...formFieldsValid}\r\n console.log(formInput);\r\n Object.entries(formInput).forEach(([key, value]) => {\r\n if(key === \"assetName\" || key === \"oldDeviceId\" || key === \"newDeviceId\" || key === \"oldDeviceIdStatus\"){\r\n if(value === \"\"){\r\n tempFormFieldsValid[key]= {\r\n isValid: false,\r\n displayMessage: true,\r\n message: \"Field cannot be empty\"\r\n }\r\n isValid = false\r\n }\r\n }\r\n }) \r\n if(!isValid){\r\n setFormFieldsValid({...tempFormFieldsValid})\r\n }\r\n if(!formFieldsValid.assetName.isValid || !formFieldsValid.newDeviceId.isValid){\r\n isValid = false;\r\n }\r\n return isValid;\r\n \r\n } \r\n const oldDeviceIdChangeHandler = (e:React.ChangeEvent):void => {\r\n let input = e.target.value.toUpperCase();\r\n if (/^[0-9a-fA-F]+$/.test(input) || input === \"\"){ \r\n if(input.length >= 3 ){ \r\n let messageBody:IMessageSender = {\r\n type:'getDeviceIDs',\r\n userId: auth.username,\r\n deviceIdFilter: {\r\n Type: \"All Trackers\",\r\n Pattern: input,\r\n } \r\n }\r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => { \r\n if(res.data.status === \"OK\"){\r\n setOldDeviceIdArr(res.data.names);\r\n if(res.data.names.includes(input)){\r\n getAssetInfo({deviceId: input})\r\n }else{ \r\n setFieldBlock(false)\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n isValid: false, \r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n oldDeviceId:{\r\n isValid: false, \r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n }) \r\n if(formInput.assetName !== \"\"){\r\n setFormInput({\r\n ...formInput,\r\n assetName: \"\",\r\n oldDeviceId: input,\r\n })\r\n\r\n } \r\n }\r\n }else{\r\n setFieldBlock(false)\r\n setOldDeviceIdArr([]);\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n oldDeviceId:{\r\n isValid: false, \r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }else{\r\n setOldDeviceIdArr([]);\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n oldDeviceId:{\r\n isValid: false, \r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n setFormInput({\r\n ...formInput,\r\n oldDeviceId: input\r\n })\r\n }\r\n };\r\n const assetNameChangeHandler = (e:React.ChangeEvent):void => {\r\n let input = e.target.value;\r\n if(!(/'/.test(input)) && !(/\"/.test(input)) && !(/`/.test(input))){ \r\n if(input.length >= 3 ){ \r\n let messageBody:IMessageSender = {\r\n type:'getAssetNames',\r\n userId: auth.username,\r\n data: input\r\n }\r\n if(formInput.assetType !== \"\"){\r\n messageBody.assetType = formInput.assetType\r\n } \r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => { \r\n if(res.data.status === \"OK\"){\r\n setAssetNamesArr(res.data.names)\r\n if(res.data.names.includes(input)){ \r\n getAssetInfo({assetName: input}) \r\n }else{ \r\n setFieldBlock(false)\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n isValid: false, \r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n oldDeviceId:{\r\n isValid: false, \r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n }) \r\n if(formInput.oldDeviceId !== \"\"){\r\n setFormInput({\r\n ...formInput,\r\n assetName: input,\r\n oldDeviceId: \"\",\r\n })\r\n }\r\n setOldDeviceIdArr([]);\r\n }\r\n }else{\r\n setFieldBlock(false)\r\n setAssetNamesArr([]) \r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n isValid: false, \r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }else{\r\n setAssetNamesArr([])\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n isValid: false, \r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n setFormInput({\r\n ...formInput,\r\n assetName: input\r\n })\r\n }\r\n };\r\n const getAssetInfo = (assetInfoData:{}):void => { \r\n const messageBody:IMessageSender = {\r\n type: 'getAssetInfo',\r\n userId: auth.username,\r\n assetInfo: assetInfoData\r\n } \r\n axios.post('/message',messageBody, auth.header\r\n ).then(({ data }: {data :IMessageResponse}) =>{\r\n if(data.status === \"OK\"){\r\n let assetInfo =data.assetInfo\r\n if(assetInfo){ \r\n setFormInput({\r\n ...formInput,\r\n assetName: data.assetInfo.assetName,\r\n assetType: assetInfo.assetType ? assetInfo.assetType : \"\",\r\n oldDeviceId: data.assetInfo.deviceId,\r\n })\r\n setDefaultSelect(data.assetInfo.assetType) \r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n assetType:{\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n oldDeviceId: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n })\r\n setFieldBlock(true);\r\n } \r\n }else{ \r\n if(Object.keys(assetInfoData)[0] === \"assetName\"){\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n assetName:{\r\n isValid: false,\r\n displayMessage: true,\r\n message: data.errorDescription\r\n }\r\n })\r\n }else{\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n oldDeviceId:{\r\n isValid: false,\r\n displayMessage: true,\r\n message: data.errorDescription\r\n }\r\n })\r\n }\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }\r\n const selectChangeHandler = (e: React.ChangeEvent):void => {\r\n let name = e.target.name; \r\n setFormInput({\r\n ...formInput,\r\n [name]: e.target.value,\r\n });\r\n if(name === \"assetType\"){\r\n setDefaultSelect(e.target.value) \r\n }else{\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n oldDeviceIdStatus: {\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n }; \r\n const newTrackerChangeHandler = (e: React.ChangeEvent) => {\r\n let input = e.target.value.toUpperCase();\r\n if (/^[0-9a-fA-F]+$/.test(input) || input === \"\") {\r\n setFormInput({\r\n ...formInput,\r\n newDeviceId: input\r\n })\r\n if(input.length >= 3){\r\n let messageBody:IMessageSender = {\r\n type: 'getDeviceIDs',\r\n userId: auth.username,\r\n deviceIdFilter: {\r\n Type: \"Unassigned Trackers\",\r\n Pattern: input,\r\n }\r\n }\r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => { \r\n if(res.data.status === \"OK\"){\r\n setNewDeviceIdArr(res.data.names)\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n newDeviceId:{\r\n ...formFieldsValid.newDeviceId,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n if(res.data.names.includes(input)){\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n newDeviceId:{\r\n isValid:true,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }else{\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n newDeviceId:{\r\n isValid:false,\r\n displayMessage: false,\r\n message: \"\"\r\n }\r\n })\r\n }\r\n }else{\r\n setNewDeviceIdArr([])\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n newDeviceId:{\r\n isValid:false,\r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n }\r\n })\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }else{\r\n setNewDeviceIdArr([])\r\n setFormFieldsValid({\r\n ...formFieldsValid,\r\n newDeviceId:{\r\n isValid:false,\r\n displayMessage: false,\r\n message: \"\"\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 < FormInternalDivTemplate\r\n id=\"assetName\"\r\n label=\"Asset Name *\"\r\n type=\"list\"\r\n value={formInput.assetName}\r\n maxLength={32}\r\n displayMessage={formFieldsValid.assetName.displayMessage}\r\n message={formFieldsValid.assetName.message}\r\n onChange={assetNameChangeHandler}\r\n listId=\"assetsNamesId\"\r\n array={assetNamesArr}\r\n disabled={isDisabled()}\r\n />\r\n < FormInternalDivTemplate\r\n id=\"oldDeviceId\"\r\n label=\"Old Tracker ID *\"\r\n type=\"list\"\r\n value={formInput.oldDeviceId}\r\n maxLength={8}\r\n displayMessage={formFieldsValid.oldDeviceId.displayMessage}\r\n message={formFieldsValid.oldDeviceId.message}\r\n onChange={oldDeviceIdChangeHandler}\r\n listId=\"oldDevicesId\"\r\n array={oldDeviceIdArr}\r\n disabled={isDisabled()}\r\n />\r\n < FormInternalDivTemplate\r\n id=\"newDeviceId\"\r\n label=\"New Tracker ID *\"\r\n type=\"list\"\r\n value={formInput.newDeviceId}\r\n maxLength={8}\r\n displayMessage={formFieldsValid.newDeviceId.displayMessage}\r\n message={formFieldsValid.newDeviceId.message}\r\n onChange={newTrackerChangeHandler}\r\n listId=\"newDevicesId\"\r\n array={newDeviceIdArr}\r\n disabled={isDisabled()}\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 ReplaceTrackerForm;","import '../../css/App.css'\r\nimport '../../css/PageTemplate.css'\r\nimport { useContext, useEffect } from 'react'\r\nimport { AppContext } from \"../context/AppContext\";\r\nimport { IAuth, IReplaceTrackerForm, IReplaceTrackerFormValidation } from '../../interfaces/interface';\r\nimport { IMessageSender, IMessageErrorResponse } from '../../interfaces/messageInterface';\r\nimport PopMessage from '../PopMessage/PopMessage';\r\nimport AddLoadSensorForm from './ReplaceTrackerForm';\r\nimport axios from 'axios';\r\nimport HeaderTemplate from '../HeaderTemplate';\r\nimport { ReplaceTrackerContext } from '../context/ReplaceTrackerContext';\r\n\r\nfunction ReplaceTracker() {\r\n \r\n const { Form, formVal, blockField, errMessage, selectDefault} = useContext(ReplaceTrackerContext);\r\n const { navBarStatus, authorization, disMessage, navBarHandler, errorHandlerFunction } = useContext(AppContext);\r\n const [ auth ]: IAuth[] = authorization;\r\n const [isNavbarOpen] = navBarStatus;\r\n const navBarClickHandler: (e: any) => void = navBarHandler;\r\n const [formInput]: IReplaceTrackerForm[] = Form; \r\n const [,setFormInput]: React.Dispatch>[] = Form; \r\n const [displayMessage]: string[] = disMessage;\r\n const [,setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [,setFormFieldsValid]:React.Dispatch>[] = formVal;\r\n const [, setFieldBlock]: React.Dispatch>[] = blockField;\r\n const [, setDefaultSelect] = selectDefault;\r\n const [errorMessage]:string[] = errMessage;\r\n const [,setErrorMessage]: React.Dispatch>[] = errMessage;\r\n const errorHandler: (status: number) => string = errorHandlerFunction;\r\n \r\n const replaceTrackerHandler = (): void => {\r\n let messageBody:IMessageSender = {\r\n type: 'replaceTracker',\r\n userId: auth.username,\r\n replaceTracker: {\r\n assetType: formInput.assetType,\r\n assetName: formInput.assetName,\r\n oldDeviceId: formInput.oldDeviceId,\r\n newDeviceId: formInput.newDeviceId,\r\n }\r\n }\r\n setDisplayMessage(\"processing\");\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\"){\r\n setDisplayMessage(\"done\");\r\n clearFields();\r\n } else {\r\n setErrorMessage(res.data.errorDescription)\r\n setDisplayMessage(\"error\");\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }\r\n\r\n const clearFields = () => {\r\n setFieldBlock(false)\r\n setFormInput({\r\n assetName: \"\",\r\n assetType: \"\",\r\n oldDeviceId: \"\",\r\n newDeviceId: \"\",\r\n oldDeviceIdStatus:\"\",\r\n })\r\n setFormFieldsValid({ \r\n assetName: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n assetType: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n oldDeviceId: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n newDeviceId: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n oldDeviceIdStatus: {\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n },\r\n })\r\n setDefaultSelect(\"\")\r\n }\r\n \r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n {displayMessage !== \"none\" && \r\n
\r\n \r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default ReplaceTracker;\r\n\r\n\r\n","import '../../css/App.css'\r\nimport '../../css/ReplaceBatteries.css'\r\nimport '../../css/PageTemplate.css'\r\nimport {useContext, useEffect, useState} from 'react'\r\nimport {AppContext} from \"../context/AppContext\";\r\nimport {IAuth, IReplaceBatteriesFormInput} from '../../interfaces/interface';\r\nimport {IMessageSender, IMessageErrorResponse, IMessageResponse} from '../../interfaces/messageInterface';\r\nimport PopMessage from '../PopMessage/PopMessage';\r\nimport axios from 'axios';\r\nimport HeaderTemplate from '../HeaderTemplate';\r\nimport FormInternalDivTemplate from '../formTemplate/FormInternalDivTemplate';\r\n\r\nfunction ReplaceBatteries() {\r\n\r\n const {navBarStatus, authorization, disMessage, navBarHandler, errorHandlerFunction} = useContext(AppContext);\r\n const [auth]: IAuth[] = authorization;\r\n const [isNavbarOpen] = navBarStatus;\r\n const navBarClickHandler: (e: any) => void = navBarHandler\r\n const [displayMessage]: string[] = disMessage;\r\n const [, setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [formInput, setFormInput] = useState({\r\n assetName: \"\",\r\n deviceId: \"\"\r\n })\r\n const [formFieldsValid, setFormFieldsValid] = useState({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n const [sensorIdArr, setSensorIdArr] = useState([])\r\n const [assetNamesArr, setAssetNamesArr] = useState([])\r\n const [errorMessage, setErrorMessage] = useState(\"\")\r\n const errorHandler: (status: number) => string = errorHandlerFunction;\r\n\r\n const isDisabled = (): boolean => {\r\n if (displayMessage !== \"none\" || isNavbarOpen === true) return true\r\n return false\r\n }\r\n const submitHandler = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n if (formValidation()) {\r\n setDisplayMessage(\"asset-details\");\r\n }\r\n }\r\n const formValidation = (): boolean => {\r\n let isValid = true\r\n if (formInput.deviceId === \"\") {\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: true,\r\n message: \"Field cannot be empty\"\r\n })\r\n isValid = false;\r\n\r\n }\r\n if (!formFieldsValid.isVaild) {\r\n isValid = false;\r\n }\r\n return isValid;\r\n }\r\n const replaceBatteriesHandler = (): void => {\r\n let messageBody: IMessageSender = {\r\n type: 'replaceBatteries',\r\n userId: auth.username,\r\n data: formInput.deviceId\r\n }\r\n setDisplayMessage(\"processing\");\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\") {\r\n setDisplayMessage(\"done\");\r\n clearFields();\r\n } else {\r\n setErrorMessage(res.data.errorDescription)\r\n setDisplayMessage(\"error\");\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }\r\n const clearFields = () => {\r\n setFormInput({\r\n assetName: \"\",\r\n deviceId: \"\"\r\n })\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n }\r\n const changeHandler = (e: React.ChangeEvent): void => {\r\n let input = e.target.value.toUpperCase();\r\n if (/^[0-9a-fA-F]+$/.test(input) || input === \"\") {\r\n setFormInput({\r\n ...formInput,\r\n deviceId: input\r\n })\r\n if (input.length >= 3) {\r\n let messageBody: IMessageSender = {\r\n type: 'getDeviceIDs',\r\n userId: auth.username,\r\n deviceIdFilter: {\r\n Type: \"All\",\r\n Pattern: input\r\n }\r\n }\r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\") {\r\n setSensorIdArr(res.data.names);\r\n if (res.data.names.includes(input)) {\r\n setFormFieldsValid({\r\n isVaild: true,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n } else {\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n }\r\n } else {\r\n setSensorIdArr([])\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: true,\r\n message: res.data.errorDescription\r\n })\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n } else {\r\n setSensorIdArr([])\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n }\r\n }\r\n };\r\n const assetNameChangeHandler = (e: React.ChangeEvent): void => {\r\n let input = e.target.value;\r\n if (!(/'/.test(input)) && !(/\"/.test(input)) && !(/`/.test(input))) {\r\n setFormInput({\r\n ...formInput,\r\n assetName: input\r\n });\r\n if (input.length >= 3) {\r\n let messageBody: IMessageSender = {\r\n type: 'getAssetNames',\r\n userId: auth.username,\r\n data: input\r\n }\r\n /*axios.post('/message',messageBody *//*For Cookie*/\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\") {\r\n setAssetNamesArr(res.data.names)\r\n\r\n isDeviceIncludes(res.data.names, input);\r\n } else {\r\n setAssetNamesArr([])\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n } else {\r\n setAssetNamesArr([])\r\n }\r\n }\r\n };\r\n const isDeviceIncludes = (deviceArr: string[], input: string): void => {\r\n if (deviceArr.includes(input)) {\r\n const messageBody: IMessageSender = {\r\n type: 'getAssetInfo',\r\n userId: auth.username,\r\n assetInfo: {\r\n assetName: input\r\n }\r\n }\r\n axios.post('/message', messageBody, auth.header\r\n ).then(({data}: { data: IMessageResponse }) => {\r\n if (data.status === \"OK\") {\r\n let assetInfo = data.assetInfo\r\n console.log(assetInfo);\r\n if (assetInfo.loadSensorId && assetInfo.loadSensorId !== \"\") {\r\n setFormInput({\r\n assetName: input,\r\n deviceId: \"\"\r\n })\r\n setSensorIdArr([assetInfo.deviceId, assetInfo.loadSensorId])\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n } else {\r\n setSensorIdArr([])\r\n setFormInput({\r\n assetName: input,\r\n deviceId: assetInfo.deviceId\r\n })\r\n setFormFieldsValid({\r\n isVaild: true,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n }\r\n // setFormInput({\r\n // ...formInput,\r\n // ...assetInfo\r\n // })\r\n\r\n } else {\r\n // setFormFieldsValid({\r\n // ...formFieldsValid,\r\n // [type]:{\r\n // displayMessage: true,\r\n // message: data.errorDescription\r\n // }\r\n // })\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }\r\n }\r\n return (\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n To reset battery consumption calculations, let us know that you've changed sensor's\r\n batteries\r\n
\r\n < FormInternalDivTemplate\r\n id=\"assetName\"\r\n label=\"Asset Name\"\r\n type=\"list\"\r\n value={formInput.assetName}\r\n maxLength={32}\r\n // displayMessage={formFieldsValid.assetName.displayMessage}\r\n // message={formFieldsValid.assetName.message}\r\n onChange={assetNameChangeHandler}\r\n listId=\"assetsNamesId\"\r\n array={assetNamesArr}\r\n disabled={isDisabled()}\r\n />\r\n < FormInternalDivTemplate\r\n id=\"sensorId\"\r\n label=\"Sensor ID *\"\r\n type=\"list\"\r\n value={formInput.deviceId}\r\n maxLength={8}\r\n displayMessage={formFieldsValid.displayMessage}\r\n message={formFieldsValid.message}\r\n onChange={changeHandler}\r\n listId=\"loadSensorsId\"\r\n array={sensorIdArr}\r\n disabled={isDisabled()}\r\n />\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {displayMessage !== \"none\" &&\r\n
\r\n \r\n
\r\n }\r\n \r\n );\r\n}\r\n\r\nexport default ReplaceBatteries;\r\n\r\n","import '../../css/FormTemplate.css'\r\nimport { IFormInternalDivFileTemplate } from \"../../interfaces/interface\";\r\nimport FormErrorDivTemplate from './FormErrorDivTemplate';\r\nimport FormTemplateLabel from './FormTemplateLabel';\r\n\r\nconst FormInternalDivFileTemplate = (props:IFormInternalDivFileTemplate) => {\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\nexport default FormInternalDivFileTemplate;","import \"../../css/App.css\";\r\nimport \"../../css/BulkLoadAsset.css\";\r\nimport \"../../css/PageTemplate.css\";\r\nimport { useContext, useState } from \"react\";\r\nimport { AppContext } from \"../context/AppContext\";\r\nimport { IAuth } from \"../../interfaces/interface\";\r\nimport {\r\n IMessageSender,\r\n} from \"../../interfaces/messageInterface\";\r\nimport { IErrorList } from \"../../interfaces/popMessageInterface\";\r\nimport PopMessage from \"../PopMessage/PopMessage\";\r\nimport axios from \"axios\";\r\nimport chunk from \"lodash/chunk\";\r\nimport HeaderTemplate from \"../HeaderTemplate\";\r\nimport FormInternalDivFileTemplate from \"../formTemplate/FormInternalDivFileTemplate\";\r\n\r\nconst BULK_SIZE = 10;\r\n\r\ninterface Props {\r\n title: string;\r\n btnText: string;\r\n fileName: string;\r\n requestType: string;\r\n successesText: string;\r\n failText: string;\r\n tooltipText: string;\r\n}\r\n\r\nfunction BulkLoadAsset(props: Props) {\r\n const {\r\n title,\r\n btnText,\r\n fileName,\r\n requestType,\r\n successesText,\r\n failText,\r\n tooltipText,\r\n } = props;\r\n const {\r\n navBarStatus,\r\n authorization,\r\n disMessage,\r\n navBarHandler,\r\n errorHandlerFunction,\r\n } = useContext(AppContext);\r\n const [auth]: IAuth[] = authorization;\r\n const [isNavbarOpen] = navBarStatus;\r\n const navBarClickHandler: (e: any) => void = navBarHandler;\r\n const [displayMessage]: string[] = disMessage;\r\n const [, setDisplayMessage]: React.Dispatch>[] =\r\n disMessage;\r\n const [csvLines, setCsvLines] = useState([]);\r\n const [headerLine, setHeaderLine] = useState();\r\n\r\n const [file, setFile] = useState(undefined);\r\n const [formFieldsValid, setFormFieldsValid] = useState({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"\",\r\n });\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n const [errorList, setErrorList] = useState([]);\r\n\r\n const [finishedCsvRows, setFinishedCsvRows] = useState(0);\r\n\r\n const errorHandler: (status: number) => string = errorHandlerFunction;\r\n\r\n const isDisabled = (): boolean => {\r\n return displayMessage !== \"none\" || isNavbarOpen === true;\r\n };\r\n const submitHandler = (e: React.FormEvent) => {\r\n e.preventDefault();\r\n setErrorList([]);\r\n if (formValidation()) {\r\n setDisplayMessage(\"bulk-load\");\r\n }\r\n };\r\n const formValidation = (): boolean => {\r\n let isValid = true;\r\n\r\n if (!formFieldsValid.isVaild) {\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: true,\r\n message: \"No file selected\",\r\n });\r\n isValid = false;\r\n }\r\n return isValid;\r\n };\r\n const bulkLoadAssetHandler = async () => {\r\n if (csvLines.length === 0) return;\r\n setFinishedCsvRows(0);\r\n\r\n const requestsBodies: IMessageSender[] = chunk(csvLines, BULK_SIZE).map((item) => {\r\n return {\r\n type: requestType,\r\n userId: auth.username,\r\n data: [headerLine, ...item].join(\"\\n\"),\r\n };\r\n });\r\n\r\n setDisplayMessage(\"processing\");\r\n let newErrors: IErrorList[] = [];\r\n let successCount = 0;\r\n let finishedRows = 0;\r\n let newErrorMessage = \"\";\r\n for (const reqBody of requestsBodies) {\r\n // cant use requestsBodies.forEach here because of the async-await\r\n try {\r\n const res = await axios.post(\"/message\", reqBody, auth.header);\r\n finishedRows += BULK_SIZE;\r\n if (res.data.successCount) {\r\n successCount += res.data.successCount;\r\n }\r\n if (res.data.status !== \"OK\") {\r\n if (res.data.errorList) {\r\n newErrors = [...newErrors, ...res.data.errorList];\r\n }\r\n }\r\n \r\n newErrorMessage = `${successCount} ${successesText}\\n`;\r\n if (newErrors.length > 0) {\r\n newErrorMessage += `${newErrors.length} ${failText}\\n`;\r\n }\r\n if (finishedRows < csvLines.length) {\r\n newErrorMessage += `Processing... (completed ${finishedRows} out of ${csvLines.length})\\n`;\r\n }\r\n\r\n setErrorList(newErrors);\r\n setErrorMessage(newErrorMessage);\r\n setFinishedCsvRows(finishedRows);\r\n setDisplayMessage(\"error\");\r\n } catch (e: any) {\r\n const errorMessage = errorHandler(e?.response.data.status);\r\n newErrorMessage += `\\nprocess aborted:\\n${errorMessage}`;\r\n setErrorMessage(newErrorMessage);\r\n setDisplayMessage(\"error\");\r\n }\r\n }\r\n };\r\n\r\n const clearFields = () => {\r\n setCsvLines([]);\r\n setHeaderLine(undefined);\r\n setFile(undefined);\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"No file selected\",\r\n });\r\n };\r\n const changeHandler = (e: React.ChangeEvent): void => {\r\n let fileList = e.target.files;\r\n if (fileList && fileList.length > 0) {\r\n let file = fileList[0];\r\n if (file.size <= 32000) {\r\n setFile(file);\r\n const reader = new FileReader();\r\n reader.onload = function () {\r\n let result = reader.result;\r\n if (typeof result === \"string\") {\r\n const _csvLines = result.split(\"\\n\").filter((line) => {\r\n let trimmedLine = line.replace(\" \", \"\").replace(\",\", \"\");\r\n return trimmedLine.length > 0;\r\n });\r\n const _headerLine = _csvLines.shift();\r\n setCsvLines(_csvLines);\r\n setHeaderLine(_headerLine);\r\n\r\n setFormFieldsValid({\r\n isVaild: true,\r\n displayMessage: false,\r\n message: \"\",\r\n });\r\n }\r\n };\r\n reader.readAsText(file);\r\n } else {\r\n clearFields();\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: true,\r\n message: \"File size is limited to 32K bytes\",\r\n });\r\n }\r\n } else {\r\n clearFields();\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"No file selected\",\r\n });\r\n }\r\n };\r\n const fileClickHandler = (e: any): void => {\r\n e.target.value = \"\";\r\n clearFields();\r\n setFormFieldsValid({\r\n isVaild: false,\r\n displayMessage: false,\r\n message: \"No file selected\",\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 Download sample file\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n {headerLine &&

file contains {csvLines.length} assets

}\r\n
\r\n \r\n {btnText}\r\n \r\n
\r\n
\r\n
\r\n {displayMessage !== \"none\" && (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default BulkLoadAsset;\r\n","import React, { useState, createContext } from \"react\";\r\nimport { IAddUpdateLocationForm, IFormFieldsValid } from \"../../interfaces/interface\";\r\n\r\nexport const AddUpdateLocationContext = createContext({});\r\n\r\nexport const AddUpdateLocationProvider: React.FC = (props) => {\r\n const [file, setFile] = useState(undefined)\r\n const [errorMessage, setErrorMessage] = useState(\"\")\r\n const [isFileJson, setIsFileJson] = useState(true)\r\n const [formInput, setFormInput] = useState({\r\n fileData: \"\",\r\n fileNamesList: [],\r\n locationType: \"\",\r\n });\r\n const [formFieldsValid, setFormFieldsValid] = useState({\r\n isValid:false,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n const [defaultSelect, setDefaultSelect] = useState(\"\")\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n};\r\n","import '../../css/App.css'\r\nimport { useContext, useEffect } from 'react'\r\nimport { AppContext } from \"../context/AppContext\";\r\nimport { IAddUpdateLocationForm, IConfiguration, IFormFieldsValid } from '../../interfaces/interface';\r\nimport FormInternalDivFileTemplate from '../formTemplate/FormInternalDivFileTemplate';\r\nimport { AddUpdateLocationContext } from '../context/AddUpdateLocationContext';\r\nimport FormSelectInternalDivTemplate from '../formTemplate/FormSelectInternalDivTemplate';\r\n\r\nfunction AddUpdateLocationForm() {\r\n \r\n const { navBarStatus, disMessage, config } = useContext(AppContext);\r\n const { Form, formVal, FileData, isJson} = useContext(AddUpdateLocationContext); \r\n const [configuration] :IConfiguration[] = config\r\n const [isNavbarOpen] = navBarStatus;\r\n const [displayMessage]: string[] = disMessage;\r\n const [,setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [formInput]: IAddUpdateLocationForm[] = Form;\r\n const [, setFormInput]: React.Dispatch>[] = Form;\r\n const [file]: File[] | undefined[] = FileData;\r\n const [, setFile]: React.Dispatch>[] = FileData;\r\n const [formFieldsValid]:IFormFieldsValid[] = formVal;\r\n const [, setFormFieldsValid]: React.Dispatch>[] = formVal;\r\n const [isFileJson, setIsFileJson] =isJson\r\n\r\n const isDisabled = (): boolean => {\r\n if(displayMessage !== \"none\" || isNavbarOpen === true) return true\r\n return false\r\n }\r\n const submitHandler = (e: React.FormEvent) => {\r\n console.log(formInput);\r\n \r\n e.preventDefault(); \r\n if(formValidation()){\r\n setDisplayMessage(\"add-update-location\");\r\n }\r\n }\r\n const formValidation = ():boolean => {\r\n let isValid = true\r\n let tempFormFieldsValid = formFieldsValid\r\n // if(formInput.fileNamesList.length === 0 && isFileJson){\r\n // tempFormFieldsValid = {\r\n // isValid: false,\r\n // displayMessage: true,\r\n // message: \"Missing name under properties in geoJson file\"\r\n // }\r\n // }\r\n if(file === undefined){\r\n tempFormFieldsValid = {\r\n isValid: false,\r\n displayMessage: true,\r\n message: \"No file selected\"\r\n }\r\n isValid = false;\r\n }\r\n if(!formFieldsValid.isValid){\r\n isValid = false;\r\n }\r\n setFormFieldsValid({...tempFormFieldsValid})\r\n return isValid;\r\n} \r\n const findNamesList = (fileData:string):void => {\r\n try{\r\n const obj = JSON.parse(fileData)\r\n let tempFileNamesList = formInput.fileNamesList\r\n if(obj.features && Array.isArray(obj.features)){\r\n let featuresArr:{properties: {name?:string}}[] = obj.features\r\n featuresArr.forEach((location) => { \r\n if(location.properties.name){\r\n tempFileNamesList.push(location.properties.name)\r\n }\r\n }) \r\n }\r\n if(tempFileNamesList.length === 0){\r\n setFormFieldsValid({\r\n isValid: false,\r\n displayMessage: true,\r\n message: \"Missing name under properties in geoJson file\"\r\n }) \r\n } \r\n setIsFileJson(true) \r\n setFormInput({\r\n ...formInput,\r\n fileNamesList:tempFileNamesList,\r\n fileData: fileData\r\n }) \r\n }catch(e){\r\n setIsFileJson(false) \r\n setFormInput({\r\n ...formInput,\r\n fileNamesList: [],\r\n fileData: fileData\r\n }) \r\n } \r\n }\r\n const fileChangeHandler = (e:React.ChangeEvent):void => {\r\n let fileList = e.target.files \r\n if(fileList && (fileList.length > 0)){ \r\n let file = fileList[0]\r\n if (file.size <= 32000) {\r\n setFile(file);\r\n const reader = new FileReader();\r\n reader.onload = function(e) {\r\n let result = reader.result;\r\n console.log(file);\r\n if(typeof(result) === \"string\"){\r\n findNamesList(result)\r\n setFormFieldsValid({\r\n isValid: true,\r\n displayMessage: false,\r\n message: \"\"\r\n })\r\n }\r\n }\r\n reader.readAsText(file); \r\n }else{\r\n clearFields()\r\n setFormFieldsValid({ \r\n isValid: false,\r\n displayMessage: true,\r\n message: \"File size is limited to 32K bytes\"\r\n })\r\n }\r\n }else{ \r\n clearFields()\r\n setFormFieldsValid({\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"No file selected\"\r\n })\r\n } \r\n};\r\nconst selectChangeHandler = (e: React.ChangeEvent):void => {\r\n setFormInput({\r\n ...formInput,\r\n locationType: e.target.value\r\n });\r\n}\r\nconst fileClickHandler = (e: any):void => {\r\n e.target.value = \"\"\r\n clearFields()\r\n setFormFieldsValid({\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"No file selected\"\r\n })\r\n}\r\nconst clearFields = () => {\r\n setFormInput({\r\n ...formInput,\r\n fileData: \"\",\r\n fileNamesList: [],\r\n });\r\n setFile(undefined); \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\nexport default AddUpdateLocationForm;\r\n","import '../../css/App.css'\r\nimport '../../css/PageTemplate.css'\r\nimport { useContext, useEffect, useState } from 'react'\r\nimport { AppContext } from \"../context/AppContext\";\r\nimport { IAddUpdateLocationForm, IAuth, IFormFieldsValid } from '../../interfaces/interface';\r\nimport { IMessageSender, IMessageErrorResponse } from '../../interfaces/messageInterface';\r\nimport { IErrorList, } from '../../interfaces/popMessageInterface';\r\nimport PopMessage from '../PopMessage/PopMessage';\r\nimport axios from 'axios';\r\nimport HeaderTemplate from '../HeaderTemplate';\r\nimport AddUpdateLocationForm from './AddUpdateLocationForm';\r\nimport { AddUpdateLocationContext } from '../context/AddUpdateLocationContext';\r\n\r\nfunction AddUpdateLocation() {\r\n \r\n const { navBarStatus, authorization, disMessage, navBarHandler, errorHandlerFunction } = useContext(AppContext);\r\n const { Form, formVal, FileData } = useContext(AddUpdateLocationContext); \r\n const [ auth ]: IAuth[] = authorization;\r\n const [isNavbarOpen] = navBarStatus;\r\n const navBarClickHandler: (e: any) => void = navBarHandler;\r\n const [displayMessage]: string[] = disMessage;\r\n const [,setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [formInput]:IAddUpdateLocationForm[] = Form;\r\n const [, setFormInput]:React.Dispatch>[] = Form;\r\n const [, setFile]: React.Dispatch>[] = FileData;\r\n const [, setFormFieldsValid]:React.Dispatch>[] = formVal;\r\n const [errorMessage, setErrorMessage] = useState(\"\");\r\n const [messageStatus, setMessageStatus] = useState(false);\r\n const [errorList, setErrorList] = useState([]);\r\n const errorHandler: (status: number) => string = errorHandlerFunction;\r\n\r\n const addUpdateLocationHandler = (): void => {\r\n let messageBody:IMessageSender = {\r\n type: 'locationBulkLoad',\r\n userId: auth.username,\r\n locationInfo: {\r\n geoJson: formInput.fileData,\r\n locationType: formInput.locationType\r\n }\r\n }\r\n setDisplayMessage(\"processing\");\r\n axios.post('/message',messageBody, auth.header\r\n ).then(res => {\r\n if(res.data.status === \"OK\"){\r\n setMessageStatus(true);\r\n if(res.data.errorList && res.data.errorDescription){\r\n setErrorMessage(res.data.errorDescription)\r\n setErrorList(res.data.errorList)\r\n setDisplayMessage(\"add-update-location-error\");\r\n\r\n }\r\n clearFields(); \r\n }else{ \r\n setMessageStatus(false);\r\n setErrorMessage(res.data.errorDescription)\r\n if(res.data.errorList){\r\n setErrorList(res.data.errorList)\r\n }\r\n setDisplayMessage(\"add-update-location-error\");\r\n }\r\n }).catch(({response}:IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setErrorMessage(errorMessage)\r\n setDisplayMessage(\"error\");\r\n })\r\n }\r\n const clearFields = () => {\r\n setFormInput({\r\n fileData: \"\",\r\n fileNamesList: [],\r\n locationType: \"\",\r\n });\r\n setFile(undefined); \r\n setFormFieldsValid({\r\n isValid: false,\r\n displayMessage: false,\r\n message: \"\"\r\n });\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n
\r\n {displayMessage !== \"none\" && \r\n
\r\n \r\n
\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default AddUpdateLocation;\r\n","import FormInternalDivTemplate from \"../formTemplate/FormInternalDivTemplate\";\r\nimport React, {FormEvent, useContext, useEffect, useState} from \"react\";\r\nimport {IMessageErrorResponse, IMessageSender} from \"../../interfaces/messageInterface\";\r\nimport axios from \"axios\";\r\nimport {AppContext} from \"../context/AppContext\";\r\nimport {IAuth} from \"../../interfaces/interface\";\r\nimport FormSubmitButton from \"../formTemplate/FormSubmitButton\";\r\nimport HeaderTemplate from \"../HeaderTemplate\";\r\nimport PopMessage from \"../PopMessage/PopMessage\";\r\n\r\nfunction SingleTracker() {\r\n const [deviceId, setDeviceId] = useState('');\r\n const [deviceIdArr, setDeviceIdArr] = useState([]);\r\n const [error, setError] = useState('');\r\n\r\n const {\r\n authorization,\r\n errorHandlerFunction: errorHandler,\r\n navBarClickHandler,\r\n disMessage\r\n } = useContext(AppContext);\r\n const [displayMessage]: string[] = disMessage;\r\n const [, setDisplayMessage]: React.Dispatch>[] = disMessage;\r\n const [auth]: IAuth[] = authorization;\r\n\r\n const deviceIdChangeHandler = (e: React.ChangeEvent) => {\r\n let input = e.target.value.toUpperCase();\r\n const isValid = /^[0-9a-fA-F]+$/.test(input) || input === \"\";\r\n if (!isValid) return;\r\n\r\n setDeviceId(input);\r\n if (input.length < 3) {\r\n setDeviceIdArr([])\r\n setError('ID too short');\r\n return;\r\n }\r\n\r\n const messageBody: IMessageSender = {\r\n type: 'getDeviceIDs',\r\n userId: auth.username,\r\n deviceIdFilter: {\r\n Type: \"Unregistered Trackers\",\r\n Pattern: input,\r\n }\r\n }\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\") {\r\n setDeviceIdArr(res.data.names)\r\n if (res.data.names.includes(input)) {\r\n setError('');\r\n } else {\r\n setError('No match');\r\n }\r\n } else {\r\n setDeviceIdArr([])\r\n setError(res.data.errorDescription);\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setError(errorMessage)\r\n })\r\n }\r\n\r\n const onSubmit = (e: FormEvent) => {\r\n e.preventDefault();\r\n if (!deviceId || error) return;\r\n const messageBody: IMessageSender = {\r\n type: 'trackerRegistration',\r\n userId: auth.username,\r\n data: deviceId\r\n }\r\n setDisplayMessage(\"processing\");\r\n axios.post('/message', messageBody, auth.header\r\n ).then(res => {\r\n if (res.data.status === \"OK\") {\r\n setDisplayMessage(\"done\");\r\n } else {\r\n setError(res.data.errorDescription)\r\n setDisplayMessage(\"error\");\r\n }\r\n }).catch(({response}: IMessageErrorResponse) => {\r\n const errorMessage = errorHandler(response.data.status)\r\n setError(errorMessage)\r\n setDisplayMessage(\"error\");\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 {displayMessage !== \"none\" &&\r\n
\r\n {}}\r\n formData={{}}\r\n type={\"general\"}\r\n error={error}\r\n errorTitle=\"Registration failed\"\r\n errorDescription\r\n />\r\n
\r\n }\r\n \r\n\r\n
\r\n );\r\n\r\n}\r\n\r\nexport default SingleTracker;","import './css/App.css';\r\nimport {useContext} from 'react'\r\nimport {Navigate, Route, Routes} from \"react-router-dom\";\r\nimport {AppContext} from \"./componnents/context/AppContext\";\r\nimport {AddAssetProvider} from \"./componnents/context/AddAssetContext\";\r\nimport Login from './componnents/Login';\r\nimport AddAsset from './componnents/addAsset/AddAsset';\r\nimport ViewEditAsset from './componnents/viewEditAsset/ViewEditAsset';\r\nimport {ViewEditAssetProvider} from './componnents/context/ViewEditAssetContext';\r\nimport {ReplaceTrackerProvider} from './componnents/context/ReplaceTrackerContext';\r\nimport ReplaceTracker from './componnents/replaceTracker/ReplaceTracker';\r\nimport ReplaceBatteries from './componnents/replaceBatteries/ReplaceBatteries';\r\nimport BulkLoadAsset from './componnents/bulkLoadAsset/BulkLoadAsset';\r\nimport AddUpdateLocation from './componnents/addUpdateLocation/AddUpdateLocation';\r\nimport {AddUpdateLocationProvider} from './componnents/context/AddUpdateLocationContext';\r\nimport SingleTracker from \"./componnents/singleTracker/SingleTracker\";\r\nimport {VersionCheck} from \"react-version-check\";\r\nimport packageJson from '../package.json';\r\n\r\nfunction App() {\r\n const {login} = useContext(AppContext);\r\n const [isLogged] = login;\r\n // useEffect(() => {\r\n\r\n // if(isLogged === false){\r\n // console.log(`token-validate token : ${auth.token}`);\r\n\r\n // axios.get(\"token-validate\",{ \r\n // headers: {\r\n // Authorization: `Basic ${auth.token}`,\r\n // // type: \"cookie\"\r\n // }}).then((res) =>{\r\n // if(res.status === 200){\r\n // setIsLogged(true)\r\n // }\r\n // })\r\n // }\r\n // },[])\r\n return (\r\n
\r\n \r\n {isLogged ?\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\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 App;\r\n","import { Component, ErrorInfo, ReactNode } from \"react\";\r\n\r\ninterface Props {\r\n children: ReactNode;\r\n}\r\n\r\ninterface State {\r\n hasError: boolean;\r\n}\r\n\r\nclass ErrorBoundary extends Component {\r\n public state: State = {\r\n hasError: false,\r\n };\r\n\r\n public static getDerivedStateFromError(_: Error): State {\r\n return { hasError: true };\r\n }\r\n\r\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) {\r\n console.error(\"Uncaught error:\", error, errorInfo);\r\n }\r\n\r\n public render() {\r\n if (this.state.hasError) {\r\n return

Sorry.. there was an error with the server please try again later.

;\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default ErrorBoundary;\r\n\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\nimport ErrorBoundary from \"./utils/ErrorBoundary\";\r\nimport { BrowserRouter } from \"react-router-dom\";\r\nimport { AppProvider } from \"./componnents/context/AppContext\";\r\nimport axios from 'axios';\r\n\r\naxios.defaults.baseURL = 'https://app.hoopo.tech:3022';\r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n"],"sourceRoot":""}