) {\n this.commutes = value;\n }\n}\n","import PointsOnMap from \"../models/PointsOnMap\";\nimport Patches from \"../models/Patches\";\nimport Commutes from \"../models/Commutes\";\nimport DaySummary from \"../models/DaySummary\";\n\nconst MAGIC_STRING =\n \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*_+|:<>?-=.,/\";\nconst BASE = 40;\nconst STATUS_MAGIC_STRING =\n \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ~!@#$%^&*_+|:<>?-=.,/\";\n\nexport const getData = (data) => {\n return data ? data : \"NA\";\n};\n\nexport const getDate = (today) => {\n var date = new Date(today),\n mnth = (\"0\" + (date.getMonth() + 1)).slice(-2),\n day = (\"0\" + date.getDate()).slice(-2);\n return [day, mnth, date.getFullYear()].join(\"-\");\n};\n\nexport const getDateDiff = (today) => {\n var date = new Date(today);\n var date2 = new Date();\n\n var mnth = (\"0\" + (date.getMonth() + 1)).slice(-2);\n var day = (\"0\" + date.getDate()).slice(-2);\n\n var Difference_In_Time = date.getTime() - date2.getTime();\n\n var Difference_In_Days = Difference_In_Time / (1000 * 3600 * 24);\n\n if (Difference_In_Days > 10) {\n return (\n \n {[day, mnth, date.getFullYear()].join(\"-\")}\n
\n );\n } else if (Difference_In_Days < 10 && Difference_In_Days > 0) {\n return (\n \n {[day, mnth, date.getFullYear()].join(\"-\")}\n
\n );\n } else {\n return (\n \n {[day, mnth, date.getFullYear()].join(\"-\")}\n
\n );\n }\n};\n\nexport const getDateToday = (today) => {\n var date = new Date(today),\n mnth = (\"0\" + (date.getMonth() + 1)).slice(-2),\n day = (\"0\" + date.getDate()).slice(-2);\n return [date.getFullYear(), mnth, day].join(\"-\");\n};\n\nexport const culpritValue = (value) => {\n if (value === \"\") {\n return \"Not a Culprit\";\n } else if (value === true) {\n return \"True\";\n } else {\n return \"False\";\n }\n};\n\nexport const getTimeSummary = (date) => {\n var milliSeconds = Date.parse(date);\n const dateObject = new Date(milliSeconds);\n const humanDateFormat = dateObject.toLocaleTimeString();\n\n const newDate =\n dateObject.toLocaleDateString(\"en-US\", { day: \"numeric\" }) +\n \"-\" +\n dateObject.toLocaleDateString(\"en-US\", { month: \"numeric\" }) +\n \"-\" +\n dateObject.toLocaleDateString(\"en-US\", { year: \"numeric\" });\n\n const check = newDate + \" , \" + humanDateFormat;\n\n return check;\n};\n\nexport const boolValue = (value) => {\n if (value === null) {\n return \"NA\";\n } else if (value === true) {\n return \"True\";\n } else {\n return \"False\";\n }\n};\n\nexport const getPathColor = (value) => {\n console.log(\"value :\", value);\n if (value === 0) {\n console.log(\"yellow\");\n return \"#FFFF00\"; //yellow\n } else if (value === 1) {\n return \"#00FF00\"; //green\n } else if (value === 2) {\n return \"#0000FF\"; //blue\n } else if (value === 3) {\n return \"#808080\"; //grey\n } else if (value === 4) {\n return \"#FFC0CB\"; //pink\n } else if (value === 5) {\n return \"#A52A2A\"; //brown\n } else {\n return \"#FF0000\"; //red\n }\n};\n\nexport const getRange = (arr) => {\n let ranges = [];\n let initial = 0;\n let end = 0;\n let startValue = arr[0];\n\n for (let i = 1; i < arr.length; i++) {\n if (arr[i] === startValue) {\n end++;\n } else {\n startValue = arr[i];\n ranges.push({\n start: initial,\n end: end,\n value: arr[i - 1],\n });\n initial = i;\n end = i;\n }\n }\n if (initial !== arr.length) {\n ranges.push({\n start: initial,\n end: arr.length - 1,\n value: arr[arr.length - 1],\n });\n }\n return ranges;\n};\n\nexport const getCustomerColor = (data) => {\n if (data === 0) {\n return \"#00FF00\";\n } else if (data === 1) {\n return \"#FF0000\"; //red\n }\n};\n\nexport const getTimeStampIST = (time) => {\n var milliSeconds = Date.parse(time);\n const dateObject = new Date(milliSeconds);\n const humanDateFormat = dateObject.toLocaleString();\n\n return humanDateFormat;\n};\n\n//Day summary\nexport const tripTimeFromDaySummary = (totalTime) => {\n let dataToDisplay = [];\n let secs = totalTime;\n let mins = Math.trunc(secs / 60);\n let hours = Math.trunc(mins / 60);\n\n if (hours < 10) {\n dataToDisplay.push(\"0\");\n dataToDisplay.push(hours);\n } else {\n dataToDisplay.push(hours);\n }\n\n dataToDisplay.push(\":\");\n mins %= 60;\n if (mins < 10) {\n dataToDisplay.push(\"0\");\n dataToDisplay.push(mins);\n } else {\n dataToDisplay.push(mins);\n }\n return dataToDisplay.join(\"\");\n};\n\n//Day summary time difference\nexport const getTimeDiff = (deviceTime) => {\n let deviceLastSeen = new Date(deviceTime);\n let currentTime = new Date();\n let diffInMs = currentTime.getTime() - deviceLastSeen.getTime();\n\n const diffTime = [];\n\n const msInDays = 1000 * 60 * 60 * 24;\n const msInHour = 1000 * 60 * 60;\n const msInMinute = 1000 * 60;\n\n let diffInMins = Math.trunc(diffInMs / msInMinute);\n let diffInHrs = Math.trunc(diffInMs / msInHour);\n let diffInDays = Math.trunc(diffInMs / msInDays);\n let diffInMonth = Math.trunc(diffInDays / 30);\n let diffInYear = Math.trunc(diffInMonth / 12);\n\n if (diffInMins < 60) {\n if (diffInMins > 1) {\n diffTime.push(diffInMins, \"Mins\", \" \", \"Ago\");\n } else if (diffInMins === 0) {\n diffTime.push(\"Just Now\");\n } else {\n diffTime.push(diffInMins, \"Min\", \" \", \"Ago\");\n }\n } else if (diffInHrs < 24) {\n if (diffInHrs > 1) {\n diffTime.push(diffInHrs, \"Hours\", \" \", \"Ago\");\n } else {\n diffTime.push(diffInHrs, \"Hour\", \" \", \"Ago\");\n }\n } else if (diffInDays < 30) {\n if (diffInDays > 1) {\n diffTime.push(diffInDays, \"Days\", \" \", \"Ago\");\n } else {\n diffTime.push(diffInDays, \"Day\", \" \", \"Ago\");\n }\n } else if (diffInMonth < 12) {\n if (diffInMonth > 1) {\n diffTime.push(diffInMonth, \"Months\", \" \", \"Ago\");\n } else {\n diffTime.push(diffInMonth, \"Month\", \" \", \"Ago\");\n }\n } else {\n if (diffInYear > 1) {\n diffTime.push(diffInYear, \"Years\", \" \", \"Ago\");\n } else {\n diffTime.push(diffInYear, \"Year \", \" \", \"Ago\");\n }\n }\n\n return diffTime.join(\" \");\n};\n\nexport const getArea = (area) => {\n const SQR_MTS_ACRES = 0.000247105;\n let areas = (area * SQR_MTS_ACRES).toFixed(2);\n\n return areas;\n};\n\nexport const parseDayDetails = (data) => {\n const commutesParsed = addArraysToDecompressedData(data.commutes);\n const patchesParsed = addArraysToDecompressedData(data.patches);\n const replayParsed = addArraysToDecompressedReplay(data.replay);\n // console.log(\"replayParsed :\", replayParsed);\n data[\"commutes\"] = formPointsFromCommutesOrPatches(commutesParsed);\n data[\"patches\"] = formPointsFromCommutesOrPatches(patchesParsed);\n data[\"replay\"] = formPointsFromReplay(replayParsed);\n // console.log(\"data :\", data);\n return data;\n};\n\nfunction addArraysToDecompressedData(commuteOrPatch) {\n let refArray = commuteOrPatch.ref;\n let ref_lat = refArray[0];\n let ref_lon = refArray[1];\n const commute_lat_array = getFinalArray(commuteOrPatch.lat, ref_lat);\n const commute_lon_array = getFinalArray(commuteOrPatch.lon, ref_lon);\n commuteOrPatch[\"lat\"] = commute_lat_array;\n commuteOrPatch[\"lon\"] = commute_lon_array;\n delete commuteOrPatch[\"ref\"];\n return commuteOrPatch;\n}\n\nfunction addArraysToDecompressedReplay(replay) {\n let ref_lat = [replay.ref_lat];\n let ref_long = [replay.ref_lon];\n const commute_lat_array = getFinalReplayArray(replay.lats, ref_lat);\n const commute_lon_array = getFinalReplayArray(replay.lons, ref_long);\n // console.log(\"replay : \", replay);\n const ts = getCompleteTripTimeStamp(replay.ts, replay.ref_ts);\n const status = getTractorIgnitionStatus(replay.status);\n replay[\"lats\"] = commute_lat_array;\n replay[\"lons\"] = commute_lon_array;\n replay[\"ts\"] = ts;\n replay[\"status\"] = status;\n delete replay[\"ref_lat\"];\n return replay;\n}\n\nfunction formPointsFromCommutesOrPatches(commutesOrPatches) {\n const lats = commutesOrPatches.lat;\n const lngs = commutesOrPatches.lon;\n const ids = commutesOrPatches.id;\n const lat = [];\n const lon = [];\n const id = [];\n\n for (let i = 0; i < lats.length; i++) {\n lat.push(lats[i]);\n lon.push(lngs[i]);\n id.push(ids[i]);\n }\n\n const points = new PointsOnMap();\n points.lats = lat;\n points.lngs = lon;\n points.ids = id;\n\n return points;\n}\n\nfunction formPointsFromReplay(replay) {\n const lats = replay.lats;\n const lngs = replay.lons;\n\n const lat = [];\n const lon = [];\n const id = [];\n const ts = replay.ts;\n const status = replay.status;\n for (let i = 0; i < lats.length; i++) {\n lat.push(lats[i]);\n lon.push(lngs[i]);\n id.push(id[i]);\n ts.push(ts[i]);\n status.push(status[i]);\n }\n const points = new PointsOnMap();\n points.lats = lat;\n points.lngs = lon;\n points.ids = id;\n points.ts = ts;\n points.status = status;\n return points;\n}\n\nfunction getFinalArray(inputStr, refArr) {\n const opArray = [];\n\n const subStrArray = getSubStrings(inputStr);\n\n for (let i = 0; i < subStrArray.length; i++) {\n let subStr = subStrArray[i];\n let tempArray = getDiffArray(subStr, refArr[i]);\n opArray.push(tempArray);\n }\n return opArray;\n}\n\nfunction getFinalReplayArray(inputStr, refArr) {\n let outputArray = getIntegerArray(inputStr, 36);\n let diffOut = getBaseValueDiff(outputArray);\n let updateDoubleData = getDifferenceData(diffOut);\n let finalData = [];\n finalData.push(refArr);\n for (let i = 1; i < updateDoubleData.length; i++) {\n finalData.push(\n parseFloat(finalData[i - 1]) + parseFloat(updateDoubleData[i])\n );\n }\n return finalData;\n}\n\nfunction getCompleteTripTimeStamp(ts, ref_time) {\n let output_array = getIntegerArray(ts, 36);\n let finalData = [];\n finalData.push(convertNotificationTimeStampToMillis(ref_time));\n for (let i = 1; i < output_array.length; i++) {\n finalData.push(finalData[i - 1] + output_array[i] * 1000);\n }\n return finalData;\n}\n\nfunction getTractorIgnitionStatus(status) {\n let count = [];\n let holder = [];\n let currentStatus = parseInt(status[0].toString());\n for (let i = 1; i < status.length; i++) {\n if (isDigit(status[i])) {\n updateStatusArray(getIntValue(holder), currentStatus, count);\n holder = [];\n currentStatus = parseInt(status[i].toString());\n } else {\n let x = STATUS_MAGIC_STRING.indexOf(status[i]);\n if (x < BASE) {\n holder.push(x);\n } else {\n holder.push(x - BASE);\n }\n if (i === status.length - 1) {\n updateStatusArray(getIntValue(holder), currentStatus, count);\n }\n }\n }\n return count;\n}\n\nfunction getSubStrings(inputStr) {\n const positions = [];\n let endIndexArr = [];\n const subStrArray = [];\n let x;\n\n for (let i = 0; i < inputStr.length; i++) {\n x = inputStr.charAt(i);\n\n if (x === MAGIC_STRING.charAt(2 * BASE + 1)) {\n positions.push(i);\n }\n }\n\n positions.unshift(-1);\n endIndexArr = positions;\n let start_ind, end_ind;\n let sub_str;\n\n for (let i = 0; i < endIndexArr.length - 1; i++) {\n start_ind = endIndexArr[i] + 1;\n end_ind = endIndexArr[i + 1];\n sub_str = inputStr.substring(start_ind, end_ind);\n subStrArray.push(sub_str);\n }\n\n return subStrArray;\n}\n\nfunction getDiffArray(subStr, refArr) {\n const pos_arr = [];\n const end_ind_arr = [];\n const diffArr = [];\n\n for (let i = 0; i < subStr.length; i++) {\n pos_arr.push(MAGIC_STRING.indexOf(subStr.charAt(i)));\n }\n\n for (let i = 0; i < pos_arr.length; i++) {\n if (pos_arr[i] < BASE) {\n end_ind_arr.push(i);\n }\n }\n\n end_ind_arr.unshift(-1);\n\n let length_arr = getDifferenceToNextNumber(end_ind_arr);\n let start_ind = 0;\n const base_arr = [];\n\n for (let i = 0; i < length_arr.length; i++) {\n let end_ind = start_ind + length_arr[i];\n\n let temp = pos_arr.slice(start_ind, end_ind);\n\n for (let j = 0; j < temp.length - 1; j++) {\n temp[j] = temp[j] - BASE;\n }\n base_arr.push(temp);\n start_ind = end_ind;\n }\n\n for (let i = 0; i < base_arr.length; i++) {\n diffArr.push(0);\n }\n\n let sum = 0;\n\n for (let i = 0; i < base_arr.length; i++) {\n let tempArr = base_arr[i];\n sum = 0;\n for (let j = 0; j < tempArr.length; j++) {\n sum += tempArr[j] * Math.pow(BASE, tempArr.length - j - 1);\n }\n diffArr[i] = sum;\n }\n\n let shift = diffArr[0];\n for (let i = 0; i < diffArr.length; i++) {\n diffArr[i] = diffArr[i] - shift;\n }\n\n const outArray = [];\n for (let i = 0; i < diffArr.length + 1; i++) {\n if (i === 0) {\n outArray.push(Math.trunc(refArr * 1000000));\n } else {\n outArray.push(0);\n }\n }\n\n for (let i = 1; i < diffArr.length; i++) {\n outArray[i] = Math.trunc(outArray[i - 1] + diffArr[i]);\n }\n\n outArray.pop();\n const opDoubleArray = [];\n for (let i = 0; i < outArray.length; i++) {\n let a = outArray[i] / 1000000;\n opDoubleArray.push(a);\n }\n return opDoubleArray;\n}\n\nfunction getIntegerArray(inputString, BASE) {\n let position = [];\n let x;\n let holder = [];\n for (let i = 0; i < inputString.length; i++) {\n x = MAGIC_STRING.indexOf(inputString.charAt(i));\n if (x < BASE) {\n holder.push(x);\n } else {\n holder.push(x - BASE);\n position.push(getIntValue(holder));\n holder = [];\n }\n }\n return position;\n}\n\nfunction getBaseValueDiff(originalArray) {\n let result = [];\n if (originalArray.length > 1) {\n for (let i = 0; i < originalArray.length; i++) {\n result.push(originalArray[i] - originalArray[0]);\n }\n return result;\n } else {\n return originalArray;\n }\n}\nfunction getDifferenceData(dataList) {\n let updated = [];\n for (let i = 0; i < dataList.length; i++) {\n let val = dataList[i] / 100000;\n updated.push(val);\n }\n return updated;\n}\n\nconst convertNotificationTimeStampToMillis = (timeStamp) =>\n new Date(timeStamp + \"Z\").getTime();\n\nconst isDigit = (c) => \"1234567890\".includes(c);\n\nfunction updateStatusArray(intValue, currentStatus, count) {\n for (let i = 0; i < intValue; i++) {\n count.push(currentStatus);\n }\n}\n\nfunction getIntValue(list) {\n let resultSum = 0;\n list.reverse();\n for (let i = 0; i < list.length; i++) {\n resultSum = resultSum + Math.pow(36, i) * list[i];\n }\n return resultSum;\n}\n\nfunction getDifferenceToNextNumber(originalArray) {\n const result = [];\n if (originalArray.length > 1) {\n for (let i = 1; i <= originalArray.length - 1; i++) {\n result.push(originalArray[i] - originalArray[i - 1]);\n }\n return result;\n } else {\n return originalArray;\n }\n}\n\nexport const parsedFuelAndStatus = (realtime, tractor) => {\n const parsed = [];\n if (realtime.status >= 0) {\n let int = parseInt(realtime.status);\n let some = Number(int).toString(2);\n //pad 0 so that length is 32 and replace \" \" with 0\n const charArray = [...some];\n\n let status = updateStatusReg(charArray);\n if (status === \"NO\") {\n if (realtime.speed === 0) {\n status = \"IDLE\";\n } else if (realtime.time < 300000) {\n status = \"ON\";\n } else {\n status = \"--\";\n }\n }\n\n parsed.push(status);\n }\n\n const {\n fuel_range_params: { start_fuel, end_fuel, fuel_accuracy },\n } = tractor;\n\n const fuel = computeFuelToDisplay(\n realtime.fuel_level_dashboard,\n tractor.app_mask_flags.fuel,\n start_fuel,\n end_fuel,\n fuel_accuracy\n );\n parsed.push(fuel);\n\n return parsed;\n};\n\nfunction updateStatusReg(charArray) {\n //0 - trip on/off\n //1 - ign on/off\n //2 - tractor status idle/running\n //3 - pto on/off\n //4 - ploughing on/off\n let status = \"\";\n if (charArray[charArray.length - 1] === \"1\") {\n if (charArray[charArray.length - 3] === \"1\") {\n if (charArray[charArray.length - 4] === \"1\") {\n status = \"ON\";\n } else {\n status = \"ON\";\n }\n } else {\n status = \"IDLE\";\n }\n } else {\n status = \"OFF\";\n }\n return status;\n}\n\nfunction computeFuelToDisplay(\n fuelInLitres,\n fuelMask,\n startFuel,\n endFuel,\n fuelAccuracy\n) {\n if (fuelMask === 1) {\n //show Fuel\n if (fuelInLitres < startFuel) return \"< \" + startFuel;\n else if (fuelInLitres >= endFuel) return \"> \" + endFuel;\n else if (fuelAccuracy > 0) {\n let stepsToCover = fuelInLitres - startFuel;\n let remainderSteps = stepsToCover % fuelAccuracy;\n let rangeStart = fuelInLitres - remainderSteps;\n let rangeEnd = rangeStart + fuelAccuracy;\n return rangeStart + \" - \" + rangeEnd;\n } else {\n return fuelInLitres.toString();\n }\n } else {\n return \"-\";\n }\n}\n\nexport const parseDaySummary = (daySummary) => {\n const { data } = daySummary;\n let commutes = [];\n let patches = [];\n let com = data.commutes;\n let pat = data.patches;\n for (let i = 0; i < com.id.length; i++) {\n let commute = new Commutes(\n com.start[i],\n com.p20[i],\n com.p40[i],\n com.p60[i],\n com.p80[i],\n com.end[i],\n com.id[i]\n );\n commutes.push(commute);\n }\n\n for (let i = 0; i < pat.id.length; i++) {\n let patch = new Patches(\n pat.running_time[i],\n pat.patch_area[i],\n pat.lat_centroid[i],\n pat.lon_centroid[i],\n pat.id[i],\n pat.fuel_consumed[i],\n pat.boundary_radius_avg[i],\n pat.patch_tags[i]\n );\n patches.push(patch);\n }\n\n let finalDaySummary = new DaySummary(\n data.device_fk_id + data.date,\n data.date,\n data.computation_id,\n data.idling_time,\n data.job_time,\n data.haulage_time,\n data.distance,\n data.total_fuel,\n data.total_fuel_lit,\n data.fuel_params.max,\n data.fuel_params.min,\n data.area,\n data.device_fk_id,\n data.details_flag,\n patches,\n commutes\n );\n\n return finalDaySummary;\n};\n","import { summaryStyles } from './summary.styles'\nimport { connect } from 'react-redux'\nimport Skeleton from '@material-ui/lab/Skeleton'\nimport {\n getData,\n getDate,\n getTimeSummary,\n boolValue,\n getDateDiff,\n} from '../../utils'\nimport {\n FaMapMarkerAlt,\n FaMobileAlt,\n FaUserAlt,\n FaBroadcastTower,\n FaTractor,\n} from 'react-icons/fa'\n\nconst Summary = ({\n summary,\n summaryLoading,\n appData,\n appLoading,\n simLoading,\n sim,\n ...props\n}) => {\n const classes = summaryStyles()\n\n const DetailItem = ({ icon, label, data, loading }) => {\n return (\n \n
{icon || label}
\n {loading ? (\n
\n ) : (\n <>\n {!data ? (\n
\n ) : (\n
{data}\n )}\n >\n )}\n
\n )\n }\n\n const detailItems = [\n {\n icon: ,\n data: getData(summary?.[0].user_name),\n },\n {\n icon: ,\n data: getData(summary?.[0].phone),\n },\n {\n icon: ,\n data: `${summary?.[0]?.location}, ${summary?.[0]?.district}, ${summary?.[0]?.state}`,\n },\n {\n icon: ,\n label: '',\n data: getData(summary?.[0]?.tractor_name),\n },\n {\n label: 'Model:',\n data: getData(summary?.[0]?.model),\n },\n {\n label: 'Machinery Type:',\n data: getData(summary?.[0]?.category),\n },\n {\n icon: ,\n data: getData(summary?.[0]?.operator),\n },\n {\n label: 'Sim Active:',\n data: sim?.sim_status,\n },\n {\n label: 'Replaced Device ID:',\n data: getData(summary?.[0]?.label),\n },\n {\n label: 'HW Batch:',\n data: getData(summary?.[0]?.hw_batch),\n },\n {\n label: 'Installation Date:',\n data: getDate(summary?.[0]?.installation_date),\n },\n {\n label: 'Subscription Due Date:',\n data: getDateDiff(summary?.[0]?.subscription_due_date),\n },\n {\n label: 'Dealer Code:',\n data: getData(summary?.[0]?.dealer_code),\n },\n {\n label: 'Area Manager:',\n data: getData(summary?.[0]?.Area_Manager),\n },\n {\n label: 'Last Ping Time (IST):',\n data: getTimeSummary(summary?.[0]?.last_ping_time),\n },\n {\n label: 'Loc Time Stamp (IST):',\n data: getTimeSummary(summary?.[0]?.loc_time_stamp),\n },\n {\n label: 'Customer registered on App:',\n data: boolValue(summary?.[0]?.Customer_registered_on_customer_app),\n },\n {\n label: 'App First Login Date:',\n data: getDate(summary?.[0]?.App_first_login_date),\n },\n {\n label: 'Firm Name:',\n data: getData(summary?.[0]?.firm_name),\n },\n {\n label: 'Subscription Days:',\n data: getData(summary?.[0]?.subscription_days),\n },\n ]\n\n const compareVersions = (version1, version2) => {\n const v1 = version1.split('.').map(Number)\n const v2 = version2.split('.').map(Number)\n\n for (let i = 0; i < Math.max(v1.length, v2.length); i++) {\n const num1 = v1[i] || 0\n const num2 = v2[i] || 0\n\n if (num1 > num2) return 1\n if (num1 < num2) return -1\n }\n return 0\n }\n\n const getAppVersionColor = (build, version) => {\n if (build === 'mahindra') {\n return compareVersions(version, '1.9.0') >= 0\n ? '#00FF00'\n : '#FF0000'\n } else if (build === 'simha') {\n return compareVersions(version, '27.8.0') >= 0\n ? '#00FF00'\n : '#FF0000'\n }\n return '#000000'\n }\n\n return (\n \n
Summary
\n
\n
\n
Device Details:
\n {summaryLoading ? (\n
\n ) : (\n <>\n {!summary ? (\n
\n ) : (\n
{getData(summary?.[0].device_id)}\n )}\n >\n )}\n
\n <>\n {detailItems.map((item, index) => (\n
\n ))}\n >\n
\n
App Version:
\n {appLoading ? (\n
\n ) : (\n <>\n {!appData ? (\n
\n ) : (\n
\n {appData.app_version}\n \n )}\n >\n )}\n
\n
\n
Device Tags:
\n {summaryLoading ? (\n
\n ) : (\n <>\n {!summary ? (\n
\n ) : (\n
{summary?.[0]?.device_tag.join(' , ')}\n )}\n >\n )}\n
\n
\n )\n}\n\nconst mapStateToProps = (state) => ({\n summary: state.summaryReducer.summary,\n summaryLoading: state.summaryReducer.loading,\n appData: state.appReducer.app,\n appLoading: state.appReducer.loading,\n sim: state.simStatusReducer.sim,\n simLoading: state.simStatusReducer.loading,\n})\nconst mapDispatchToProps = (dispatch) => ({})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Summary)\n","import { makeStyles } from '@material-ui/core/styles'\n\nexport const appDetailsStyles = makeStyles((theme) => ({\n appDetailsContent: {\n display: 'flex',\n gap: '2em',\n alignItems: 'center',\n justifyContent: 'space-between',\n flex: 1,\n '& > p': {\n margin: 0,\n padding: '0.5em',\n fontSize: '1em',\n color: '#666666',\n },\n '& > h5': {\n margin: 0,\n padding: '0.5em',\n fontSize: '1em',\n fontWeight: 'bold',\n display: 'block',\n },\n },\n}))\n","import { appDetailsStyles } from './appDetails.styles'\nimport { connect } from 'react-redux'\nimport Skeleton from '@material-ui/lab/Skeleton'\nimport { getTimeStampIST, getData } from '../../utils'\n\nconst AppDetails = ({ appData, appLoading }) => {\n const classes = appDetailsStyles()\n\n const AppSummaryItem = ({ icon, label, data, loading }) => {\n return (\n \n
{icon || label}
\n {loading ? (\n
\n ) : (\n <>\n {!data ? (\n
\n ) : (\n
{data}\n )}\n >\n )}\n
\n )\n }\n\n const appSummaryList = [\n {\n label: 'Last Open App (IST):',\n data: getTimeStampIST(appData?.Last_open_App),\n },\n {\n label: 'App Build:',\n data: getData(appData?.app_build),\n },\n {\n label: 'App Version:',\n data: getData(appData?.app_version),\n },\n {\n label: 'App Language:',\n data: getData(appData?.app_language),\n },\n {\n label: 'Area Unit:',\n data: getData(appData?.area_unit),\n },\n {\n label: 'Brand:',\n data: getData(appData?.brand),\n },\n ]\n return (\n \n {appSummaryList.map((item, index) => (\n
\n ))}\n
\n )\n}\n\nconst mapStateToProps = (state) => ({\n appData: state.appReducer.app,\n appLoading: state.appReducer.loading,\n})\nconst mapDispatchToProps = (dispatch) => ({})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(AppDetails)\n","import { makeStyles } from \"@material-ui/core/styles\";\n\nexport const fuelInstAttemptsStyles = makeStyles((theme) => ({\n text: {\n display: \"flex\",\n gap: \"2em\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flex: 1,\n \"& > p\": {\n margin: 0,\n padding: \"0.5em\",\n fontSize: \"1em\",\n color: \"#666666\",\n },\n \"& > h5\": {\n margin: 0,\n padding: \"0.5em\",\n fontSize: \"1em\",\n fontWeight: \"bold\",\n display: \"block\",\n },\n },\n}));\n","import React from \"react\";\nimport { fuelInstAttemptsStyles } from \"./instAttempts.styles\";\nimport { connect } from \"react-redux\";\nimport Skeleton from \"@material-ui/lab/Skeleton\";\n\nconst InstAttempts = ({ fuelInstAttempts, fuelInstAttemptsLoading }) => {\n const classes = fuelInstAttemptsStyles();\n return (\n \n
\n
N Installation Attempts:
\n {fuelInstAttemptsLoading ? (\n
\n ) : (\n <>\n {!fuelInstAttempts ? (\n
\n ) : (\n
{fuelInstAttempts.n_installation_attempts[0]}\n )}\n >\n )}\n
\n
\n
Installation time in mins:
\n {fuelInstAttemptsLoading ? (\n
\n ) : (\n <>\n {!fuelInstAttempts ? (\n
\n ) : (\n
\n {Object.values(fuelInstAttempts.installation_time_mins) > 0\n ? fuelInstAttempts.installation_time_mins[0].toFixed(2)\n : \"NA\"}\n \n )}\n >\n )}\n
\n
\n );\n};\n\nconst mapStateToProps = (state) => ({\n fuelInstAttempts: state.instAttemptsReducer.instAttempts,\n fuelInstAttemptsLoading: state.instAttemptsReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(InstAttempts);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { TableComponent } from \"../../elements\";\n\nconst DeviceMount = ({ instImageData }) => {\n const [mountData, setMountData] = useState([]);\n\n useEffect(() => {\n let deviceMountData = [];\n if (instImageData) {\n let device_id = Object.values(instImageData.mount.Device_ID);\n let actual_image = Object.values(instImageData.mount.Actual_Image);\n let reference_1 = Object.values(instImageData.mount.Reference_Image_1);\n let reference_2 = Object.values(instImageData.mount.Reference_Image_2);\n let reference_3 = Object.values(instImageData.mount.Reference_Image_3);\n for (let i = 0; i < device_id.length; i++) {\n deviceMountData.push({\n device: device_id[i],\n actual: actual_image[i],\n reference1: reference_1[i],\n reference2: reference_2[i],\n reference3: reference_3[i],\n });\n }\n setMountData(deviceMountData);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [instImageData]);\n\n return ;\n};\n\nconst mapStateToProps = (state) => ({\n instImageData: state.instImageReducer.instImage,\n instImageLoading: state.instImageReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DeviceMount);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { TableComponent } from \"../../elements\";\n\nconst Antennta = ({ instImageData }) => {\n const [antenntaData, setAntenntaData] = useState([]);\n\n useEffect(() => {\n let antenntaData = [];\n if (instImageData) {\n let device_id = Object.values(instImageData.antennta.Device_ID);\n let actual_image = Object.values(instImageData.antennta.Actual_Image);\n let reference_1 = Object.values(instImageData.antennta.Reference_Image_1);\n let reference_2 = Object.values(instImageData.antennta.Reference_Image_2);\n let reference_3 = Object.values(instImageData.antennta.Reference_Image_3);\n for (let i = 0; i < device_id.length; i++) {\n antenntaData.push({\n device: device_id[i],\n actual: actual_image[i],\n reference1: reference_1[i],\n reference2: reference_2[i],\n reference3: reference_3[i],\n });\n }\n setAntenntaData(antenntaData);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [instImageData]);\n\n return ;\n};\n\nconst mapStateToProps = (state) => ({\n instImageData: state.instImageReducer.instImage,\n instImageLoading: state.instImageReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Antennta);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { TableComponent } from \"../../elements\";\n\nconst Alternator = ({ instImageData }) => {\n const [alternatorData, setAlternatorData] = useState([]);\n\n useEffect(() => {\n let alternator = [];\n if (instImageData) {\n let device_id = Object.values(instImageData.alternator.Device_ID);\n let actual_image = Object.values(instImageData.alternator.Actual_Image);\n let reference_1 = Object.values(\n instImageData.alternator.Reference_Image_1\n );\n let reference_2 = Object.values(\n instImageData.alternator.Reference_Image_2\n );\n let reference_3 = Object.values(\n instImageData.alternator.Reference_Image_3\n );\n for (let i = 0; i < device_id.length; i++) {\n alternator.push({\n device: device_id[i],\n actual: actual_image[i],\n reference1: reference_1[i],\n reference2: reference_2[i],\n reference3: reference_3[i],\n });\n }\n setAlternatorData(alternator);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [instImageData]);\n\n return ;\n};\n\nconst mapStateToProps = (state) => ({\n instImageData: state.instImageReducer.instImage,\n instImageLoading: state.instImageReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Alternator);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport { TableComponent } from \"../../elements\";\n\nconst Connector = ({ instImageData }) => {\n const [connectorData, setConnectorData] = useState([]);\n\n useEffect(() => {\n let connector = [];\n if (instImageData) {\n let device_id = Object.values(instImageData.connector.Device_ID);\n let actual_image = Object.values(instImageData.connector.Actual_Image);\n let reference_1 = Object.values(\n instImageData.connector.Reference_Image_1\n );\n let reference_2 = Object.values(\n instImageData.connector.Reference_Image_2\n );\n let reference_3 = Object.values(\n instImageData.connector.Reference_Image_3\n );\n for (let i = 0; i < device_id.length; i++) {\n connector.push({\n device: device_id[i],\n actual: actual_image[i],\n reference1: reference_1[i],\n reference2: reference_2[i],\n reference3: reference_3[i],\n });\n }\n setConnectorData(connector);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [instImageData]);\n\n return ;\n};\n\nconst mapStateToProps = (state) => ({\n instImageData: state.instImageReducer.instImage,\n instImageLoading: state.instImageReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Connector);\n","import { makeStyles } from \"@material-ui/core/styles\";\n\nexport const fuelGsmGpsStyles = makeStyles((theme) => ({\n text: {\n display: \"flex\",\n gap: \"2em\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flex: 1,\n \"& > p\": {\n margin: 0,\n padding: \"0.5em\",\n fontSize: \"1.2em\",\n color: \"#666666\",\n },\n \"& > h5\": {\n margin: 0,\n padding: \"0.5em\",\n fontSize: \"1.5em\",\n fontWeight: \"bold\",\n display: \"block\",\n },\n },\n}));\n","import React, { useState, useEffect } from \"react\";\nimport { fuelGsmGpsStyles } from \"./gsmGps.styles\";\nimport { connect } from \"react-redux\";\nimport Table from \"@material-ui/core/Table\";\nimport TableBody from \"@material-ui/core/TableBody\";\nimport TableCell from \"@material-ui/core/TableCell\";\nimport TableContainer from \"@material-ui/core/TableContainer\";\nimport TableHead from \"@material-ui/core/TableHead\";\nimport TableRow from \"@material-ui/core/TableRow\";\nimport Paper from \"@material-ui/core/Paper\";\n\nconst Gsmgps = ({ fuelGsmGps }) => {\n const classes = fuelGsmGpsStyles();\n const [fuelGsm, setFuelGsm] = useState([]);\n\n useEffect(() => {\n let fuelGsmData = [];\n if (fuelGsmGps) {\n let created = Object.values(fuelGsmGps.created_at);\n let lock_percentage = Object.values(fuelGsmGps.Lock_Percentage);\n let rtpp = Object.values(fuelGsmGps.RTPP);\n for (let i = 0; i < created.length; i++) {\n fuelGsmData.push({\n created_at: created[i],\n lockPercentage: lock_percentage[i],\n rtppData: rtpp[i],\n });\n }\n setFuelGsm(fuelGsmData);\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fuelGsmGps]);\n\n return (\n \n
\n \n \n \n Created at\n Location\n Network\n \n \n \n {fuelGsm.slice(0, 10).map((row) => (\n \n \n {row.created_at}\n \n {row.lockPercentage}\n {row.rtppData}\n \n ))}\n \n
\n \n
\n );\n};\n\nconst mapStateToProps = (state) => ({\n fuelGsmGps: state.gsmGpsReducer.gsmGps,\n fuelGsmGpsLoading: state.gsmGpsReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Gsmgps);\n","import * as types from '../types'\n\nexport const fetchTicketMoreInfoRequest = ({ requestTicket }) => ({\n type: types.TICKET_MORE_INFO_REQUEST,\n payload: {\n requestTicket,\n },\n})\n\nexport const fetchTicketMoreInfoSuccess = ({ resTicket }) => ({\n type: types.TICKET_MORE_INFO_SUCCESS,\n payload: {\n resTicket,\n },\n})\n\nexport const fetchTicketMoreInfoFailure = ({ error }) => ({\n type: types.TICKET_MORE_INFO_FAILURE,\n payload: {\n error: error.message,\n },\n})\n","import { makeStyles } from '@material-ui/core/styles'\n\nexport const modalStyles = makeStyles((theme) => ({\n modalWrapper: {\n position: 'fixed',\n left: '0',\n right: '0',\n bottom: '0',\n top: '0',\n background: 'rgba(198, 198, 198, 0.9)',\n zIndex: '1',\n },\n modalContainer: {\n position: 'fixed',\n left: '50%',\n top: '30%',\n transform: 'translate(-50%, -50%)',\n background: '#fff',\n width: '80vw',\n minWidth: '300px',\n maxWidth: '100vw',\n height: '400px',\n overflowY: 'scroll',\n padding: '1rem',\n borderRadius: '0.5rem',\n display: 'flex',\n flexDirection: 'column',\n zIndex: '1',\n },\n closeModal: {\n display: 'flex',\n justifyContent: 'end',\n marginBottom: '10px',\n cursor: 'pointer',\n },\n tableHeader: {\n fontSize: '16px',\n fontWeight: '600',\n },\n}))\n","import { useState, useEffect } from 'react'\nimport Table from '@material-ui/core/Table'\nimport TableBody from '@material-ui/core/TableBody'\nimport TableCell from '@material-ui/core/TableCell'\nimport TableContainer from '@material-ui/core/TableContainer'\nimport TableHead from '@material-ui/core/TableHead'\nimport TableRow from '@material-ui/core/TableRow'\nimport { connect } from 'react-redux'\nimport { modalStyles } from './modal.styles'\n\nexport const Modal = ({ ticket, setModalOpen, ...props }) => {\n const classes = modalStyles()\n const [ticketData, setTicketData] = useState([])\n\n useEffect(() => {\n document.body.style.overflowY = 'hidden'\n\n return () => {\n document.body.style.overflowY = 'scroll'\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [])\n\n useEffect(() => {\n console.log(ticket)\n if (ticket?.status) {\n setTicketData(ticket.data)\n console.log(ticketData, ticket.data)\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ticket])\n\n return (\n <>\n setModalOpen(false)}\n >
\n \n
setModalOpen(false)}\n >\n Close\n
\n
\n \n \n \n \n Account Assigned to\n \n \n Account Operated From\n \n \n Close By\n \n \n Activity\n \n \n Tag\n \n \n Action\n \n \n Date\n \n \n \n \n {ticketData?.map((row, index) => (\n \n {' '}\n \n {row[0] || 'NA'}\n \n {row[1] || 'NA'}\n {row[2] || 'NA'}\n {row[3] || 'NA'}\n {row[4] || 'NA'}\n {row[5] || 'NA'}\n {row[6] || 'NA'}\n \n ))}\n \n
\n \n
\n >\n )\n}\n\nconst mapStateToProps = (state) => ({\n ticket: state.ticketMoreInfoReducer.resTicket,\n ticketLoading: state.ticketReducer.loading,\n})\nconst mapDispatchToProps = (dispatch) => ({})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Modal)\n","import React, { useState, useEffect } from 'react'\nimport { connect } from 'react-redux'\nimport Table from '@material-ui/core/Table'\nimport TableBody from '@material-ui/core/TableBody'\nimport TableCell from '@material-ui/core/TableCell'\nimport TableContainer from '@material-ui/core/TableContainer'\nimport TableHead from '@material-ui/core/TableHead'\nimport TableRow from '@material-ui/core/TableRow'\nimport { fetchTicketMoreInfoRequest } from '../../store/actions/ticketMoreInfoAction'\nimport Modal from '../Modal'\n\nconst Ticket = ({ ticket, ...props }) => {\n const [ticketdata, setTicketData] = useState([])\n const [modalOpen, setModalOpen] = useState(false)\n\n useEffect(() => {\n let ticketData = []\n if (ticket) {\n let device_fk = Object.values(ticket.device_fk_id)\n let ticket_id = Object.values(ticket.ticket_id)\n let created_at = Object.values(ticket.created_at)\n let ticket_status = Object.values(ticket.ticket_status)\n let issue_name = Object.values(ticket.issue_name)\n let support_comments = Object.values(ticket.support_comments)\n let ticket_summary = Object.values(ticket.ticket_summary)\n for (let i = 0; i < created_at.length; i++) {\n var milliSeconds = Date.parse(created_at[i])\n const dateObject = new Date(milliSeconds)\n const humanDateFormat = dateObject.toLocaleString()\n ticketData.push({\n deviceFk: device_fk[i],\n ticketId: ticket_id[i],\n createdAt: humanDateFormat,\n ticketStatus: ticket_status[i],\n issueName: issue_name[i],\n supportComments: support_comments[i],\n ticketSummary: ticket_summary[i],\n })\n }\n setTicketData(ticketData)\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [ticket])\n\n return (\n <>\n \n
\n \n \n \n Device Fk Id\n Ticket Id\n Created At (IST)\n Ticket Status\n Issue Name\n Supporting Comments\n Ticket Summary\n More Info\n \n \n \n {ticketdata.map((row) => (\n \n \n {row.deviceFk}\n \n {row.ticketId}\n {row.createdAt}\n {row.ticketStatus}\n {row.issueName}\n {row.supportComments}\n {row.ticketSummary}\n {\n let requestTicket = {\n ticket_id: row.ticketId,\n }\n props.getTicketInfo({\n requestTicket,\n })\n setModalOpen(true)\n }}\n >\n \n Click\n \n \n \n ))}\n \n
\n \n
\n {modalOpen && }\n >\n )\n}\n\nconst mapStateToProps = (state) => ({\n ticket: state.ticketReducer.ticket,\n ticketLoading: state.ticketReducer.loading,\n})\nconst mapDispatchToProps = (dispatch) => ({\n getTicketInfo: ({ requestTicket }) => {\n dispatch(fetchTicketMoreInfoRequest({ requestTicket }))\n },\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Ticket)\n","import { makeStyles } from \"@material-ui/core/styles\";\n\nexport const tripReplayStyles = makeStyles((theme) => ({\n root: {\n width: \"100%\",\n height: \"100%\",\n },\n tilesWrapper: {\n maxWidth: \"1400px\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flexWrap: \"wrap\",\n },\n bigTile: {\n minWidth: \"900px\",\n minHeight: \"500px\",\n flex: 1,\n display: \"flex\",\n alignItems: \"center\",\n flexDirection: \"column\",\n\n borderRadius: \"10px\",\n transition: \"0.3s\",\n [theme.breakpoints.down(\"sm\")]: {\n minWidth: \"200px\",\n },\n \"& > h3\": {\n fontSize: \"1.2rem\",\n [theme.breakpoints.down(\"sm\")]: {\n fontSize: \"1.4rem\",\n },\n },\n },\n controlButton: {\n background: \"#651fff \",\n height: \"45px\",\n width: \"70px\",\n borderRadius: \"4px\",\n color: \"#FFFFFF\",\n padding: \"0 0.5em\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n\n speedButton: {\n background: \"#651fff \",\n height: \"45px\",\n width: \"70px\",\n borderRadius: \"4px\",\n color: \"#FFFFFF\",\n padding: \"0 0.5em\",\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n },\n\n sliderButton: {\n padding: \"0 0.5em\",\n width: \"200px\",\n background: \"#651fff\",\n borderRadius: \"4px\",\n height: \"45px\",\n display: \"flex\",\n alignItems: \"center\",\n },\n\n timeButton: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n gap: \"0.2em\",\n background: \"#651fff \",\n height: \"45px\",\n minWidth: \"180px\",\n borderRadius: \"4px\",\n color: \"#FFFFFF\",\n padding: \"0 0.5em\",\n fontSize: \"1em\",\n },\n\n summaryButton: {\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n flexDirection: \"column\",\n gap: \"0.1em\",\n background: \"#651fff \",\n minHeight: \"45px\",\n minWidth: \"180px\",\n borderRadius: \"4px\",\n color: \"#FFFFFF\",\n padding: \"0.2em 0.5em\",\n },\n}));\n","export default __webpack_public_path__ + \"static/media/TractorIcon2.96c10ac4.svg\";","export default __webpack_public_path__ + \"static/media/0-deg.091f33c6.svg\";","export default __webpack_public_path__ + \"static/media/45-deg.7b1831f5.svg\";","export default __webpack_public_path__ + \"static/media/90-deg.08219b68.svg\";","export default __webpack_public_path__ + \"static/media/135-deg.e0e9535a.svg\";","export default __webpack_public_path__ + \"static/media/180-deg.63cb1a29.svg\";","export default __webpack_public_path__ + \"static/media/225-deg.fed75c7e.svg\";","export default __webpack_public_path__ + \"static/media/270deg.e64feecd.svg\";","export default __webpack_public_path__ + \"static/media/315-deg.120c95ce.svg\";","import deg0 from \"../assets/tractor/0-deg.svg\";\nimport deg45 from \"../assets/tractor/45-deg.svg\";\nimport deg90 from \"../assets/tractor/90-deg.svg\";\nimport deg135 from \"../assets/tractor/135-deg.svg\";\nimport deg180 from \"../assets/tractor/180-deg.svg\";\nimport deg225 from \"../assets/tractor/225-deg.svg\";\nimport deg270 from \"../assets/tractor/270deg.svg\";\nimport deg315 from \"../assets/tractor/315-deg.svg\";\n\nfunction getTractor(angle) {\n // console.log(\"function\", angle);\n let value = -angle;\n // console.log(\"value\", value);\n\n if (-45 < angle && angle < 0) {\n if (Math.abs(45 - value) < Math.abs(0 - value)) {\n return deg315;\n } else {\n return deg0; //neww0\n }\n } else if (-90 < angle && angle < -45) {\n if (Math.abs(90 - value) < Math.abs(45 - value)) {\n return deg270; //neww90\n } else {\n return deg315;\n }\n } else if (-135 < angle && angle < -90) {\n if (Math.abs(135 - value) < Math.abs(90 - value)) {\n return deg225;\n } else {\n return deg270; //neww90\n }\n } else if (-180 < angle && angle < -135) {\n if (Math.abs(180 - value) < Math.abs(135 - value)) {\n return deg180; //neww180\n } else {\n return deg225;\n }\n } else if (-225 < angle && angle < -180) {\n if (Math.abs(225 - value) < Math.abs(180 - value)) {\n return deg135;\n } else {\n return deg180; //neww180\n }\n } else if (-270 < angle && angle < -225) {\n if (Math.abs(270 - value) < Math.abs(225 - value)) {\n return deg90; //neww270\n } else {\n return deg135;\n }\n } else if (-315 < angle && angle < -270) {\n if (Math.abs(315 - value) < Math.abs(270 - value)) {\n return deg45;\n } else {\n return deg90; //neww270\n }\n } else {\n if (Math.abs(360 - value) < Math.abs(315 - value)) {\n return deg0; //neww0\n } else {\n return deg45;\n }\n }\n}\n\nexport default getTractor;\n","import React, { useState, useEffect, useRef } from \"react\";\nimport { connect } from \"react-redux\";\nimport { tripReplayStyles } from \"./tripReplay.styles\";\nimport GoogleMapReact from \"google-map-react\";\nimport markerIcon from \"../../assets/home/TractorIcon2.svg\";\nimport getTractor from \"../../utils/getTractor\";\n// import { getTimeDiff } from \"../../utils\";\n\nimport PlayArrowIcon from \"@material-ui/icons/PlayArrow\";\nimport PauseIcon from \"@material-ui/icons/Pause\";\nimport StopIcon from \"@material-ui/icons/Stop\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport Select from \"@material-ui/core/Select\";\nimport Slider from \"@material-ui/core/Slider\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\nlet plottedMarkers = null;\nconst GoogleMaps = ({\n fueldata,\n fuelLoading,\n dataDaySummary,\n mapPlotLoading,\n summary,\n commutes,\n patches,\n replay,\n dailyStatus,\n area,\n totalTime,\n kms,\n}) => {\n const classes = tripReplayStyles();\n\n const [mapLoaded, setMapLoaded] = useState(false);\n const [map, setMapInstance] = useState(null);\n const [maps, setMapsInstance] = useState(null);\n const [allPolygons, setPolygons] = useState(null);\n const [allPolylines, setPolyLines] = useState(null);\n\n const [gameLoop, setGameLoop] = useState(null);\n const [block, setBlock] = useState(true);\n const [time, setTime] = useState(\"\");\n const [showTime, setShowTime] = useState(false);\n const [engineStatus, setEngineStatus] = useState(false);\n const [speed, setSpeed] = useState(500);\n const [toggle, setToggle] = useState(false);\n\n useEffect(() => {\n if (fueldata && dailyStatus && mapLoaded) {\n clearPolyLinesIfAny();\n plotFinalPoints();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [fueldata, dailyStatus]);\n\n const onMapLoaded = (map, maps) => {\n map.setMapTypeId(maps.MapTypeId.HYBRID);\n setMapMarkers(map, maps);\n };\n\n let index = useRef(1);\n let polylines = [];\n let polygons = [];\n let bounds;\n\n let defaultProps = {\n center: {\n lat: 20.5937,\n lng: 78.9629,\n },\n zoom: 19,\n };\n\n const clearPolyLinesIfAny = () => {\n if (allPolylines !== null && allPolylines.length > 0) {\n for (let i = 0; i < allPolylines.length; i++) {\n allPolylines[i].setMap(null);\n }\n setPolyLines(null);\n }\n\n if (allPolygons !== null && allPolygons.length > 0) {\n for (let i = 0; i < allPolygons.length; i++) {\n allPolygons[i].setMap(null);\n }\n setPolygons(null);\n }\n };\n\n const clearMarkersIfAny = () => {\n if (plottedMarkers && plottedMarkers.length > 0) {\n for (let i = 0; i < plottedMarkers.length; i++) {\n plottedMarkers[i].setMap(null);\n }\n }\n };\n\n const plotFinalPoints = async () => {\n bounds = new maps.LatLngBounds();\n const allCommuteLats = commutes.lats;\n const allCommuteLngs = commutes.lngs;\n drawPoints(allCommuteLats, allCommuteLngs, false);\n\n const allPatchLats = patches.lats;\n const allPatchLngs = patches.lngs;\n drawPoints(allPatchLats, allPatchLngs, true);\n map.fitBounds(bounds);\n };\n\n function drawPoints(allLats, allLngs, isPatch) {\n for (let i = 0; i < allLats.length; i++) {\n const points = [];\n for (let j = 0; j < allLats[i].length; j++) {\n let tractorPoint = new maps.LatLng(allLats[i][j], allLngs[i][j]);\n let latLng = { lat: allLats[i][j], lng: allLngs[i][j] };\n points.push(latLng);\n bounds.extend(tractorPoint);\n }\n\n if (isPatch) {\n const tractorPatch = new maps.Polygon({\n paths: points,\n strokeColor: \"#2196f3\",\n strokeOpacity: 1,\n strokeWeight: 4,\n fillColor: \"#1565c0\",\n fillOpacity: 1,\n });\n tractorPatch.setMap(map);\n polygons.push(tractorPatch);\n } else {\n const tractorPath = new maps.Polyline({\n path: points,\n geodesic: true,\n strokeColor: \"#BE1E2D\",\n strokeOpacity: 1.0,\n strokeWeight: 4,\n });\n\n tractorPath.setMap(map);\n polylines.push(tractorPath);\n }\n }\n\n setPolyLines(polylines);\n setPolygons(polygons);\n }\n\n const setMapMarkers = (map, maps) => {\n clearMarkersIfAny();\n let bounds = new maps.LatLngBounds();\n plottedMarkers = [];\n\n if (replay) {\n let devicePostion = new maps.LatLng(\n commutes.lats[0][0],\n commutes.lngs[0][0]\n );\n\n let marker = new maps.Marker({\n position: {\n lat: commutes.lats[0][0],\n lng: commutes.lngs[0][0],\n },\n map,\n icon: markerIcon,\n optimized: false,\n });\n\n marker.setMap(map);\n plottedMarkers.push(marker);\n\n bounds.extend(devicePostion);\n }\n };\n\n function move(lat, lng, map, maps, timer, nextlat, nextlng, status) {\n let bounds = new maps.LatLngBounds();\n let tractorPosition = new maps.LatLng(parseFloat(lat), parseFloat(lng));\n const point1LatLng = new maps.LatLng(lat, lng);\n const point2LatLng = new maps.LatLng(nextlat, nextlng);\n\n const angle = window.google.maps.geometry.spherical.computeHeading(\n point1LatLng,\n point2LatLng\n );\n\n if (status > 0) setEngineStatus(true);\n else setEngineStatus(false);\n\n const actualAngle = angle - 180;\n\n if (timer !== undefined) {\n const dateObject = new Date(timer - 19800000);\n const Time = dateObject.toLocaleTimeString(\"en-US\");\n setTime(Time);\n } else {\n setTime(\"TimeStamp\");\n }\n\n clearMarkersIfAny();\n\n let Value = getTractor(actualAngle);\n\n const image = {\n url: Value,\n scaledSize: new maps.Size(45.35, 39.5),\n origin: new maps.Point(0, 0),\n anchor: new maps.Point(25, 25),\n };\n let marker = new maps.Marker({\n position: {\n lat: parseFloat(lat),\n lng: parseFloat(lng),\n },\n map: map,\n icon: image,\n\n optimized: false,\n });\n\n marker.setMap(map);\n plottedMarkers.push(marker);\n bounds.extend(tractorPosition);\n }\n\n let clear;\n\n const play = (map, maps, velocity) => {\n let timer = replay.ts;\n let lat = replay.lats;\n let lng = replay.lngs;\n let status = replay.status;\n setBlock(false);\n\n setShowTime(true);\n clearMarkersIfAny();\n clear = setInterval(() => {\n setGameLoop(clear);\n if (index.current >= lat.length) {\n index.current = 1;\n clearInterval(clear);\n }\n move(\n lat[index.current],\n lng[index.current],\n map,\n maps,\n timer[index.current],\n lat[index.current - 1],\n lng[index.current - 1],\n status[index.current - 1]\n );\n index.current++;\n }, velocity);\n };\n\n const pauseGame = (map, maps) => {\n clearInterval(gameLoop);\n };\n\n const stop = (map, maps) => {\n let lat = commutes.lats[0][0];\n let lng = commutes.lngs[0][0];\n clearInterval(gameLoop);\n // setBlock(true);\n setGameLoop(null);\n setToggle(false);\n clearMarkersIfAny();\n move(lat[0], lng[0], map, maps);\n index.current = 1;\n };\n\n const handleChange = (event) => {\n clearInterval(gameLoop);\n const val = event.target.value;\n setSpeed(val);\n play(map, maps, val);\n };\n\n const handlePlayPause = () => {\n if (toggle === false) {\n setToggle(true);\n setSpeed(500);\n play(map, maps, 500);\n } else {\n setToggle(false);\n pauseGame(map, maps);\n }\n };\n\n return (\n \n
\n
{\n onMapLoaded(map, maps);\n setMapsInstance(maps);\n setMapInstance(map);\n setMapLoaded(true);\n }}\n >\n {mapLoaded && dailyStatus && setMapMarkers(map, maps)}\n \n {fuelLoading ? (\n
\n \n
\n ) : (\n <>\n {\" \"}\n {dailyStatus && (\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \"hello\"}\n aria-labelledby=\"discrete-slider\"\n valueLabelDisplay=\"auto\"\n color=\"secondary\"\n step={1}\n marks\n min={0}\n max={Object.keys(replay.lats).length ?? 0}\n onChange={(e, number) => {\n index.current = number;\n }}\n />\n
\n {showTime && (\n
\n
{showTime && !block && time}
\n Status
\n {engineStatus === true ? (\n \n ) : (\n \n )}\n \n )}\n
\n
Kilo Meters :{kms}
\n Hours Used :{totalTime}
\n Acres : {area}
\n {/* \n Last Active : {getTimeDiff(summary.last_ping_time[0])}\n
*/}\n \n
\n )}\n >\n )}\n
\n
\n );\n};\n\nconst mapStateToProps = (state) => ({\n fueldata: state.fuelReducer.fuel,\n fuelLoading: state.fuelReducer.loading,\n dataDaySummary: state.daySummData.daySummary,\n summary: state.summaryReducer.summary,\n area: state.daySummData.area,\n totalTime: state.daySummData.totalTime,\n kms: state.daySummData.kms,\n mapPlotLoading: state.daySummData.loading,\n commutes: state.daySummData.commutes,\n patches: state.daySummData.patches,\n dailyStatus: state.daySummData.dailyStatus,\n replay: state.daySummData.replay,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(GoogleMaps);\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport ReactFusioncharts from \"react-fusioncharts\";\nimport FusionCharts from \"fusioncharts\";\nimport charts from \"fusioncharts/fusioncharts.charts\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\n// Resolves charts dependancy\ncharts(FusionCharts);\n\nfunction CustomerChart({ fuelLoading, fueldata }) {\n const [series, setSeries] = useState([]);\n\n useEffect(() => {\n if (fueldata && fueldata.message === undefined) {\n let timeStampData = Object.values(fueldata.time_stamp);\n let customerData = Object.values(fueldata.cust_index);\n let data = [];\n\n let count = 0;\n for (let i = 0; i < timeStampData.length; i++) {\n if (customerData[i] !== -1) {\n count++;\n }\n }\n\n let size;\n if (count < 100) {\n size = \"6\";\n } else {\n size = \"0.5\";\n }\n\n for (let i = 0; i < timeStampData.length; i++) {\n if (customerData[i] === -1) {\n data.push({\n label: timeStampData[i],\n });\n } else if (customerData[i] < 1) {\n data.push({\n label: timeStampData[i],\n value: customerData[i],\n drawAnchors: \"1\",\n anchorRadius: \"1\",\n anchorBorderThickness: \"3\",\n anchorBorderColor: \"#FF0000\",\n anchorSides: \"3\",\n anchorBgColor: \"#d3f7ff\",\n });\n } else {\n data.push({\n label: timeStampData[i],\n value: customerData[i],\n drawAnchors: \"1\",\n anchorRadius: \"1\",\n // anchorBorderThickness: \"0.5\",\n anchorBorderThickness: size,\n anchorBorderColor: \"#FFCC00\",\n anchorSides: \"1\",\n anchorBgColor: \"#FFCC00\",\n });\n }\n }\n\n setSeries(data);\n }\n }, [fueldata]);\n\n const chartConfigs = {\n chart: {\n xAxisName: \"TimeStamp (IST)\",\n yAxisName: \"Customer\",\n showValues: \"0\",\n showBorder: \"0\",\n showCanvasBorder: \"0\",\n drawAnchors: \"0\",\n // numberSuffix: \"L\",\n theme: \"fusion\",\n xAxisNameFontSize: \"20\",\n xAxisNameFontColor: \"#651fff\",\n yAxisNameFontSize: \"20\",\n yAxisNameFontColor: \"#651fff\",\n labelStep: \"60\",\n baseFontSize: \"11\",\n plottooltext:\n \"TimeStamp : $label
Customer : $dataValue\",\n // width: \"\",\n // height: \"600\",\n },\n data: series,\n };\n\n function ChartData() {\n // let timeStammp = Object.values(fueldata.time_stamp);\n if (fuelLoading) {\n return (\n \n \n
\n );\n } else if (\n fueldata &&\n fueldata.message === undefined &&\n Object.values(fueldata.time_stamp).length > 0\n ) {\n return (\n \n );\n } else {\n return (\n {fueldata?.message}
\n );\n }\n }\n\n return (\n \n {!fueldata ? (\n
\n \n
\n ) : (\n ChartData()\n )}\n
\n );\n}\n\nconst mapStateToProps = (state) => ({\n fueldata: state.fuelReducer.fuel,\n fuelLoading: state.fuelReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(CustomerChart);\n","import React, { useState, useEffect } from 'react'\nimport { connect } from 'react-redux'\nimport ReactFusioncharts from 'react-fusioncharts'\nimport FusionCharts from 'fusioncharts'\nimport charts from 'fusioncharts/fusioncharts.charts'\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\n// Resolves charts dependancy\ncharts(FusionCharts)\n\nfunction GsmChart({ fuelLoading, fueldata, summaryLoading, summary }) {\n const [series, setSeries] = useState([])\n\n useEffect(() => {\n if (fueldata && fueldata.message === undefined) {\n let timeStampData = Object.values(fueldata.time_stamp)\n let gsmData = Object.values(fueldata.gsm_quality)\n let data = []\n let count = 0\n for (let i = 0; i < timeStampData.length; i++) {\n if (gsmData[i] !== -1) {\n count++\n }\n }\n let size\n if (count < 100) {\n size = '6'\n } else {\n size = '0.5'\n }\n for (let i = 0; i < timeStampData.length; i++) {\n if (gsmData[i] === -1) {\n data.push({\n label: timeStampData[i],\n })\n } else if (gsmData[i] < 1) {\n data.push({\n label: timeStampData[i],\n value: gsmData[i],\n drawAnchors: '1',\n anchorRadius: '1',\n anchorBorderThickness: '3',\n anchorBorderColor: '#FF0000',\n anchorSides: '3',\n anchorBgColor: '#d3f7ff',\n })\n } else {\n data.push({\n label: timeStampData[i],\n value: gsmData[i],\n drawAnchors: '1',\n anchorRadius: '1',\n // anchorBorderThickness: \"0.5\",\n anchorBorderThickness: size,\n anchorBorderColor: '#FFCC00',\n anchorSides: '1',\n anchorBgColor: '#FFCC00',\n })\n }\n }\n setSeries(data)\n }\n }, [fueldata, summaryLoading, summary])\n\n const chartConfigs = {\n chart: {\n xAxisName: 'TimeStamp (IST)',\n yAxisName: 'Gsm Quality',\n showValues: '0',\n showBorder: '0',\n showCanvasBorder: '0',\n drawAnchors: '0',\n theme: 'fusion',\n xAxisNameFontSize: '20',\n xAxisNameFontColor: '#651fff',\n yAxisNameFontSize: '20',\n yAxisNameFontColor: '#651fff',\n labelStep: '60',\n baseFontSize: '11',\n plottooltext:\n \"TimeStamp : $label
GSM Plot : $dataValue\",\n // width: \"\",\n // height: \"600\",\n },\n data: series,\n }\n\n function ChartData() {\n // let timeStammp = Object.values(fueldata.time_stamp);\n if (fuelLoading) {\n return (\n \n \n
\n )\n } else if (\n fueldata &&\n fueldata.message === undefined &&\n Object.values(fueldata.time_stamp).length > 0\n ) {\n if (!summaryLoading) {\n if (\n summary?.[0].hw_batch === 49 ||\n summary?.[0].hw_batch === 52\n ) {\n return (\n \n No Data for HW Batch 49 and 52\n
\n )\n } else {\n return (\n \n )\n }\n }\n } else {\n return (\n \n {fueldata?.message}\n
\n )\n }\n }\n\n return (\n \n {!fueldata ? (\n
\n \n
\n ) : (\n ChartData()\n )}\n
\n )\n}\n\nconst mapStateToProps = (state) => ({\n fueldata: state.fuelReducer.fuel,\n fuelLoading: state.fuelReducer.loading,\n summary: state.summaryReducer.summary,\n summaryLoading: state.summaryReducer.loading,\n})\nconst mapDispatchToProps = (dispatch) => ({})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(GsmChart)\n","import React, { useState, useEffect } from 'react'\nimport { connect } from 'react-redux'\nimport ReactFusioncharts from 'react-fusioncharts'\nimport FusionCharts from 'fusioncharts'\nimport charts from 'fusioncharts/fusioncharts.charts'\nimport CircularProgress from '@material-ui/core/CircularProgress'\n\n// Resolves charts dependancy\ncharts(FusionCharts)\n\nfunction DelayChart({ fuelLoading, fueldata, summary, summaryLoading }) {\n const [series, setSeries] = useState([])\n\n useEffect(() => {\n if (fueldata && fueldata.message === undefined) {\n let timeStampData = Object.values(fueldata.time_stamp)\n let delayData = Object.values(fueldata.firmware_version)\n let data = []\n\n let count = 0\n for (let i = 0; i < timeStampData.length; i++) {\n if (delayData[i] !== -1) {\n count++\n }\n }\n\n let size\n if (count < 100) {\n size = '6'\n } else {\n size = '0.5'\n }\n\n for (let i = 0; i < timeStampData.length; i++) {\n if (delayData[i] === -1) {\n data.push({\n label: timeStampData[i],\n })\n } else if (delayData[i] < 1) {\n let hourConvert = delayData[i] / 3600\n data.push({\n label: timeStampData[i],\n // value: delayData[i],\n value: hourConvert,\n drawAnchors: '1',\n anchorRadius: '1',\n anchorBorderThickness: '3',\n anchorBorderColor: '#FF0000',\n anchorSides: '3',\n anchorBgColor: '#d3f7ff',\n })\n } else {\n let hourConvert = delayData[i] / 3600\n data.push({\n label: timeStampData[i],\n // value: delayData[i],\n value: hourConvert,\n drawAnchors: '1',\n anchorRadius: '1',\n // anchorBorderThickness: \"0.5\",\n anchorBorderThickness: size,\n anchorBorderColor: '#FFCC00',\n anchorSides: '1',\n anchorBgColor: '#FFCC00',\n })\n }\n }\n\n setSeries(data)\n }\n }, [fueldata, summary, summaryLoading])\n\n const chartConfigs = {\n chart: {\n xAxisName: 'TimeStamp (IST)',\n yAxisName: 'Delay (hours)',\n showValues: '0',\n showBorder: '0',\n showCanvasBorder: '0',\n drawAnchors: '0',\n // numberSuffix: \"L\",\n theme: 'fusion',\n xAxisNameFontSize: '20',\n xAxisNameFontColor: '#651fff',\n yAxisNameFontSize: '20',\n yAxisNameFontColor: '#651fff',\n labelStep: '60',\n baseFontSize: '11',\n plottooltext:\n \"TimeStamp : $label
Delay : $dataValue\",\n },\n data: series,\n }\n\n function ChartData() {\n // let timeStammp = Object.values(fueldata.time_stamp);\n if (fuelLoading) {\n return (\n \n \n
\n )\n } else if (\n fueldata &&\n fueldata.message === undefined &&\n Object.values(fueldata.time_stamp).length > 0\n ) {\n if (!summaryLoading) {\n if (\n summary?.[0].hw_batch === 49 ||\n summary?.[0].hw_batch === 52\n ) {\n return (\n \n No Data for HW Batch 49 and 52\n
\n )\n } else {\n return (\n \n )\n }\n }\n } else {\n return (\n \n {fueldata?.message}\n
\n )\n }\n }\n\n return (\n \n {!fueldata ? (\n
\n \n
\n ) : (\n ChartData()\n )}\n
\n )\n}\n\nconst mapStateToProps = (state) => ({\n fueldata: state.fuelReducer.fuel,\n fuelLoading: state.fuelReducer.loading,\n summary: state.summaryReducer.summary,\n summaryLoading: state.summaryReducer.loading,\n})\nconst mapDispatchToProps = (dispatch) => ({})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DelayChart)\n","import React, { useState, useEffect } from \"react\";\nimport { connect } from \"react-redux\";\nimport ReactFusioncharts from \"react-fusioncharts\";\nimport FusionCharts from \"fusioncharts\";\nimport charts from \"fusioncharts/fusioncharts.charts\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n// Resolves charts dependancy\ncharts(FusionCharts);\n\nfunction DistanceChart({ fuelLoading, fueldata }) {\n const [series, setSeries] = useState([]);\n\n useEffect(() => {\n if (fueldata && fueldata.message === undefined) {\n let timeStampData = Object.values(fueldata.time_stamp);\n let distanceData = Object.values(fueldata.distance);\n let data = [];\n let count = 0;\n for (let i = 0; i < timeStampData.length; i++) {\n if (distanceData[i] !== -1) {\n count++;\n }\n }\n\n let size;\n if (count < 100) {\n size = \"6\";\n } else {\n size = \"0.5\";\n }\n\n for (let i = 0; i < timeStampData.length; i++) {\n if (distanceData[i] === -1) {\n data.push({\n label: timeStampData[i],\n });\n } else if (distanceData[i] < 1) {\n data.push({\n label: timeStampData[i],\n value: distanceData[i],\n drawAnchors: \"1\",\n anchorRadius: \"1\",\n anchorBorderThickness: \"3\",\n anchorBorderColor: \"#FF0000\",\n anchorSides: \"3\",\n anchorBgColor: \"#d3f7ff\",\n });\n } else {\n data.push({\n label: timeStampData[i],\n value: distanceData[i],\n drawAnchors: \"1\",\n anchorRadius: \"1\",\n // anchorBorderThickness: \"0.5\",\n anchorBorderThickness: size,\n anchorBorderColor: \"#FFCC00\",\n anchorSides: \"1\",\n anchorBgColor: \"#FFCC00\",\n });\n }\n }\n\n setSeries(data);\n }\n }, [fueldata]);\n\n const chartConfigs = {\n chart: {\n xAxisName: \"TimeStamp (IST)\",\n yAxisName: \"DIstance Graph (meters)\",\n showValues: \"0\",\n showBorder: \"0\",\n drawAnchors: \"0\",\n showCanvasBorder: \"0\",\n numberSuffix: \"m\",\n theme: \"fusion\",\n xAxisNameFontSize: \"20\",\n xAxisNameFontColor: \"#651fff\",\n yAxisNameFontSize: \"20\",\n yAxisNameFontColor: \"#651fff\",\n labelStep: \"60\",\n baseFontSize: \"11\",\n plottooltext:\n \"TimeStamp : $label
Distance : $dataValue\",\n // width: \"\",\n // height: \"600\",\n },\n data: series,\n };\n\n function ChartData() {\n // let timeStammp = Object.values(fueldata.time_stamp);\n if (fuelLoading) {\n return (\n \n \n
\n );\n } else if (\n fueldata &&\n fueldata.message === undefined &&\n Object.values(fueldata.time_stamp).length > 0\n ) {\n return (\n \n );\n } else {\n return (\n No Data found
\n );\n }\n }\n\n return (\n \n {!fueldata ? (\n
\n \n
\n ) : (\n ChartData()\n )}\n
\n );\n}\n\nconst mapStateToProps = (state) => ({\n fueldata: state.fuelReducer.fuel,\n fuelLoading: state.fuelReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DistanceChart);\n","import React, { useState } from \"react\";\nimport CustomerChart from \"../../fusionChart/customerChart\";\nimport GsmChart from \"../../fusionChart/gsmChart\";\nimport DelayChart from \"../../fusionChart/delayChart\";\nimport DistanceChart from \"../../fusionChart/distanceChart\";\nimport Select from \"@material-ui/core/Select\";\nimport MenuItem from \"@material-ui/core/MenuItem\";\nimport { connect } from \"react-redux\";\nimport { fetchFuelRequest } from \"../../store/actions/fetchfuelsAction\";\n\nconst QualityChart = ({ ...props }) => {\n const [chart, setChart] = useState(1);\n\n const handleChart = (event) => {\n const chartType = event.target.value;\n setChart(chartType);\n };\n\n function changeChart() {\n if (chart === 2) {\n return ;\n } else if (chart === 3) {\n return ;\n } else {\n return ;\n }\n }\n\n return (\n <>\n \n \n
\n {chart === 1 ? : changeChart()}\n >\n );\n};\n\nconst mapStateToProps = () => ({});\nconst mapDispatchToProps = (dispatch) => ({\n fuelSubmit: ({ requestData }) => dispatch(fetchFuelRequest({ requestData })),\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(QualityChart);\n","import { makeStyles } from '@material-ui/core/styles'\n\nexport const FirebaseDataStyles = makeStyles((theme) => ({\n firebaseContent: {\n display: 'flex',\n gap: '2em',\n alignItems: 'center',\n justifyContent: 'space-between',\n flex: 1,\n '& > p': {\n margin: 0,\n padding: '0.5em',\n fontSize: '1em',\n color: '#666666',\n },\n '& > span': {\n margin: 0,\n padding: '0.5em',\n fontSize: '1em',\n fontWeight: 'bold',\n display: 'block',\n },\n },\n}))\n","import React from 'react'\nimport { FirebaseDataStyles } from './firebaseData.styles'\nimport { connect } from 'react-redux'\nimport Skeleton from '@material-ui/lab/Skeleton'\nimport { getData } from '../../utils'\n\nconst FirebaseData = ({ firebase, firebaseLoading, ...props }) => {\n const classes = FirebaseDataStyles()\n\n const FirebaseSummaryItem = ({ icon, label, data, loading }) => {\n return (\n \n
{icon || label}
\n {loading ? (\n
\n ) : (\n <>\n {!data ? (\n
\n ) : (\n
{data}\n )}\n >\n )}\n
\n )\n }\n\n const firebaseList = [\n {\n label: 'Is app open?:',\n data:\n firebase?.['Is app open?'] === 0\n ? 'Closed Currently'\n : 'Open Currently',\n },\n {\n label: 'Engine Status:',\n data: getData(firebase?.['Engine Status']),\n },\n {\n label: 'Last Seen At:',\n data: getData(firebase?.['Last Seen At']),\n },\n {\n label: 'Time Stamp (IST):',\n data: getData(firebase?.['Time Stamp (IST)']),\n },\n {\n label: 'Fuel (litres):',\n data: getData(firebase?.['Fuel (litres)']),\n },\n {\n label: 'Speed:',\n data: getData(firebase?.['Speed']),\n },\n {\n label: 'Latitude:',\n data: getData(firebase?.['Latitude']),\n },\n {\n label: 'Longitude:',\n data: getData(firebase?.['Longitude']),\n },\n {\n label: 'GPS Lock:',\n data: getData(firebase?.['GPS Lock']),\n },\n ]\n\n return (\n \n <>\n {firebaseList.map((item, index) => (\n \n ))}\n >\n
\n )\n}\n\nconst mapStateToProps = (state) => ({\n firebase: state.firebaseReducer.firebaseData,\n firebaseLoading: state.firebaseReducer.loading,\n})\nconst mapDispatchToProps = (dispatch) => ({})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(FirebaseData)\n","import * as types from \"../types\";\n\nexport const fetchFuelSummaryRequest = ({ requestDevice }) => ({\n type: types.FETCH_FUEL_SUMMARY_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const fetchFuelSummarySuccess = ({ fuelSummary }) => ({\n type: types.FETCH_FUEL_SUMMARY_SUCCESS,\n payload: {\n fuelSummary,\n },\n});\n\nexport const fetchFuelSummaryFailure = ({ error }) => ({\n type: types.FETCH_FUEL_SUMMARY_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const fetchFuelModelRequest = ({ requestDevice }) => ({\n type: types.FETCH_FUEL_MODEL_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const fetchFuelModelSuccess = ({ fuelModel }) => ({\n type: types.FETCH_FUEL_MODEL_SUCCESS,\n payload: {\n fuelModel,\n },\n});\n\nexport const fetchFuelModelFailure = ({ error }) => ({\n type: types.FETCH_FUEL_MODEL_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const fetchTicketRequest = ({ requestDevice }) => ({\n type: types.FETCH_TICKET_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const fetchTicketSuccess = ({ ticket }) => ({\n type: types.FETCH_TICKET_SUCCESS,\n payload: {\n ticket,\n },\n});\n\nexport const fetchTicketFailure = ({ error }) => ({\n type: types.FETCH_TICKET_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const fetchAppRequest = ({ requestDevice }) => ({\n type: types.FETCH_APP_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const fetchAppSuccess = ({ app }) => ({\n type: types.FETCH_APP_SUCCESS,\n payload: {\n app,\n },\n});\n\nexport const fetchAppFailure = ({ error }) => ({\n type: types.FETCH_APP_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const fetchInstAttemptsRequest = ({ requestDevice }) => ({\n type: types.FETCH_INST_ATTEMPTS_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const fetchInstAttemptsSuccess = ({ instAttempts }) => ({\n type: types.FETCH_INST_ATTEMPTS_SUCCESS,\n payload: {\n instAttempts,\n },\n});\n\nexport const fetchInstAttemptsFailure = ({ error }) => ({\n type: types.FETCH_INST_ATTEMPTS_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const fetchGsmGpsRequest = ({ requestDevice }) => ({\n type: types.FETCH_GSM_GPS_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const fetchGsmGpsSuccess = ({ gsmGps }) => ({\n type: types.FETCH_GSM_GPS_SUCCESS,\n payload: {\n gsmGps,\n },\n});\n\nexport const fetchGsmGpsFailure = ({ error }) => ({\n type: types.FETCH_GSM_GPS_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const fetchInstImageRequest = ({ requestDevice }) => ({\n type: types.FETCH_INST_IMG_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const fetchInstImageSuccess = ({ instImage }) => ({\n type: types.FETCH_INST_IMG_SUCCESS,\n payload: {\n instImage,\n },\n});\n\nexport const fetchInstImageFailure = ({ error }) => ({\n type: types.FETCH_INST_IMG_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const fetchFirebaseDataRequest = ({ requestDevice }) => ({\n type: types.FETCH_FIREBASE_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const fetchFirebaseDataSuccess = ({ firebaseData }) => ({\n type: types.FETCH_FIREBASE_SUCCESS,\n payload: {\n firebaseData,\n },\n});\n\nexport const fetchFirebaseDataFailure = ({ error }) => ({\n type: types.FETCH_FIREBASE_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const daySummaryRequest = ({ requestData }) => {\n return {\n type: types.DAY_SUMMARY_REQUEST,\n payload: {\n requestData,\n },\n };\n};\n\nexport const daySummarySuccess = ({\n daySummary,\n commutes,\n patches,\n replay,\n dailyStatus,\n area,\n totalTime,\n kms,\n}) => {\n return {\n type: types.DAY_SUMMARY_SUCCESS,\n payload: {\n daySummary,\n commutes,\n patches,\n replay,\n dailyStatus,\n area,\n totalTime,\n kms,\n },\n };\n};\n\nexport const daySummaryFailure = (error) => {\n return {\n type: types.DAY_SUMMARY_FAILURE,\n payload: {\n error: error.message,\n },\n };\n};\n","import * as types from \"../types\";\n\nexport const logoutRequest = () => {\n return {\n type: types.LOGOUT_REQUEST,\n };\n};\nexport const logoutRequestSuccess = () => {\n return {\n type: types.LOGOUT_REQUEST_SUCCESS,\n };\n};\n\nexport const logoutRequestFailure = (error) => {\n return {\n type: types.LOGOUT_REQUEST_FAILURE,\n error: error,\n };\n};\n","import * as types from \"../types\";\n\nexport const simStatusRequest = ({ requestDevice }) => ({\n type: types.SIM_STATUS_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const simStatusSuccess = ({ sim }) => ({\n type: types.SIM_STATUS_SUCCESS,\n payload: {\n sim,\n },\n});\n\nexport const simStatusFailure = ({ error }) => ({\n type: types.SIM_STATUS_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from \"../types\";\n\nexport const replacementDetailRequest = ({ requestDevice }) => ({\n type: types.REPLACEMENT_DATA_REQUEST,\n payload: {\n requestDevice,\n },\n});\n\nexport const replacementDetailSuccess = ({ replacementDetail }) => ({\n type: types.REPLACEMENT_DATA_SUCCESS,\n payload: {\n replacementDetail,\n },\n});\n\nexport const replacementDetailFailure = ({ error }) => ({\n type: types.REPLACEMENT_DATA_FAILURE,\n payload: {\n error: error.message,\n },\n});\n","import * as types from '../types'\n\nexport const deviceListRequest = ({ requestDeviceList }) => ({\n type: types.DEVICE_LIST_REQUEST,\n payload: {\n requestDeviceList,\n },\n})\n\nexport const deviceListSuccess = ({ resDeviceList }) => ({\n type: types.DEVICE_LIST_SUCCESS,\n payload: {\n resDeviceList,\n },\n})\n\nexport const deviceListFailure = ({ error }) => ({\n type: types.DEVICE_LIST_FAILURE,\n payload: {\n error: error.message,\n },\n})\n","import { makeStyles } from \"@material-ui/core/styles\";\n\nexport const SimDetailStyles = makeStyles((theme) => ({\n text: {\n display: \"flex\",\n gap: \"2em\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flex: 1,\n \"& > p\": {\n margin: 0,\n padding: \"0.5em\",\n fontSize: \"1em\",\n color: \"#666666\",\n },\n \"& > h5\": {\n margin: 0,\n padding: \"0.5em\",\n fontSize: \"1em\",\n fontWeight: \"bold\",\n display: \"block\",\n },\n },\n}));\n","import React from \"react\";\nimport { SimDetailStyles } from \"./simData.styles\";\nimport { connect } from \"react-redux\";\nimport Skeleton from \"@material-ui/lab/Skeleton\";\n\nconst SimDetails = ({ sim, simLoading }) => {\n const classes = SimDetailStyles();\n return (\n \n
\n
Device ID:
\n {simLoading ? (\n
\n ) : (\n <>\n {!sim ? (\n
\n ) : (\n
{sim?.device_id}
\n )}\n >\n )}\n
\n
\n
Sim CCID:
\n {simLoading ? (\n
\n ) : (\n <>\n {!sim ? (\n
\n ) : (\n
{sim?.sim_ccid}
\n )}\n >\n )}\n
\n
\n
Operator:
\n {simLoading ? (\n
\n ) : (\n <>\n {!sim ? (\n
\n ) : (\n
{sim?.operator}
\n )}\n >\n )}\n
\n
\n
Sim Status:
\n {simLoading ? (\n
\n ) : (\n <>\n {!sim ? (\n
\n ) : (\n
{sim?.sim_status}
\n )}\n >\n )}\n
\n
\n );\n};\n\nconst mapStateToProps = (state) => ({\n sim: state.simStatusReducer.sim,\n simLoading: state.simStatusReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(SimDetails);\n","import { makeStyles } from \"@material-ui/core/styles\";\n\nexport const ReplacementDetailStyles = makeStyles((theme) => ({\n text: {\n display: \"flex\",\n gap: \"2em\",\n alignItems: \"center\",\n justifyContent: \"space-between\",\n flex: 1,\n \"& > p\": {\n margin: 0,\n padding: \"0.5em\",\n fontSize: \"1em\",\n color: \"#666666\",\n },\n \"& > h5\": {\n margin: 0,\n padding: \"0.5em\",\n fontSize: \"1em\",\n fontWeight: \"bold\",\n display: \"block\",\n },\n },\n}));\n","import React from \"react\";\nimport { ReplacementDetailStyles } from \"./replacementDetail.styles\";\nimport { connect } from \"react-redux\";\nimport Skeleton from \"@material-ui/lab/Skeleton\";\nimport { getTimeSummary } from \"../../utils\";\n\nconst ReplacementDetail = ({ replacementDetailData, replacementDetailLoading }) => {\n const classes = ReplacementDetailStyles();\n return (\n \n
\n
Device ID:
\n {replacementDetailLoading ? (\n
\n ) : (\n <>\n {!replacementDetailData ? (\n
\n ) : (\n
{replacementDetailData?.device_id}
\n )}\n >\n )}\n
\n
\n
Action Date:
\n {replacementDetailLoading ? (\n
\n ) : (\n <>\n {!replacementDetailData ? (\n
\n ) : (\n
{replacementDetailData?.action_date !== null ? getTimeSummary(replacementDetailData?.action_date):\"NA\"}
\n )}\n >\n )}\n
\n
\n
Effect From Date:
\n {replacementDetailLoading ? (\n
\n ) : (\n <>\n {!replacementDetailData ? (\n
\n ) : (\n
{replacementDetailData?.effect_from_date}
\n )}\n >\n )}\n
\n
\n
New Label ID:
\n {replacementDetailLoading ? (\n
\n ) : (\n <>\n {!replacementDetailData ? (\n
\n ) : (\n
{replacementDetailData?.new_label_id}
\n )}\n >\n )}\n
\n
\n
New IMEI:
\n {replacementDetailLoading ? (\n
\n ) : (\n <>\n {!replacementDetailData ? (\n
\n ) : (\n
{replacementDetailData?.[\"new imei\"]}
\n )}\n >\n )}\n
\n
\n
Old IMEI:
\n {replacementDetailLoading ? (\n
\n ) : (\n <>\n {!replacementDetailData ? (\n
\n ) : (\n
{replacementDetailData?.[\"old imei\"]}
\n )}\n >\n )}\n
\n
\n
New Sim CCID:
\n {replacementDetailLoading ? (\n
\n ) : (\n <>\n {!replacementDetailData ? (\n
\n ) : (\n
{replacementDetailData?.new_sim_ccid}
\n )}\n >\n )}\n
\n
\n
Old Sim CCID:
\n {replacementDetailLoading ? (\n
\n ) : (\n <>\n {!replacementDetailData ? (\n
\n ) : (\n
{replacementDetailData?.old_sim_ccid}
\n )}\n >\n )}\n
\n
\n );\n};\n\nconst mapStateToProps = (state) => ({\n replacementDetailData: state.replacementDetailReducer.replacementDetail,\n replacementDetailLoading: state.replacementDetailReducer.loading,\n});\nconst mapDispatchToProps = (dispatch) => ({});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(ReplacementDetail);\n","import React, { useState } from 'react'\nimport { homeStyles } from './home.styles'\nimport { connect } from 'react-redux'\nimport { Formik, Form, Field } from 'formik'\nimport { InputField, AccordionComponent } from '../../elements'\nimport TextField from '@material-ui/core/TextField'\n\nimport Dashboard from '../Dashboard'\nimport FuelSummary from '../FuelSummary'\nimport Summary from '../Summary'\nimport AppDetails from '../AppDetails'\nimport InstAttempts from '../InstAttempts'\nimport DeviceMount from '../DeviceMounting'\nimport Antennta from '../Antennta'\nimport Alternator from '../Alternator'\nimport Connector from '../Connector'\nimport Gsmgps from '../GsmGps'\nimport Ticket from '../Ticket'\nimport TripReplay from '../TripReplay'\nimport QualityChart from '../QualityChart'\nimport FirebaseData from '../FirebaseData'\n\nimport { fetchFuelRequest } from '../../store/actions/fetchfuelsAction'\nimport { fetchSummaryRequest } from '../../store/actions/fetchSummaryAction'\nimport { fetchFuelSummaryRequest } from '../../store/actions/fetchFuelSummaryAction'\nimport { fetchFuelModelRequest } from '../../store/actions/fetchFuelModelAction'\nimport { fetchTicketRequest } from '../../store/actions/fetchTicketAction'\nimport { fetchAppRequest } from '../../store/actions/fetchAppAction'\nimport { fetchInstAttemptsRequest } from '../../store/actions/fetchInstAttemptsAction'\nimport { fetchGsmGpsRequest } from '../../store/actions/fetchGsmGpsAction'\nimport { fetchInstImageRequest } from '../../store/actions/fetchInstImageAction'\nimport { fetchFirebaseDataRequest } from '../../store/actions/fetchFirebaseDataAction'\nimport { fetchThresholdRequest } from '../../store/actions/fetchThresholdValueAction'\nimport { daySummaryRequest } from '../../store/actions/fetchDaySummaryAction'\nimport { logoutRequest } from '../../store/actions/logoutAction'\nimport { simStatusRequest } from '../../store/actions/simStatusAction'\nimport { replacementDetailRequest } from '../../store/actions/replacemetDetailAction'\n\nimport Accordion from '@material-ui/core/Accordion'\nimport AccordionSummary from '@material-ui/core/AccordionSummary'\nimport AccordionDetails from '@material-ui/core/AccordionDetails'\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore'\nimport Typography from '@material-ui/core/Typography'\nimport { FaRedoAlt } from 'react-icons/fa'\n\nimport { getDateToday } from '../../utils'\nimport Tooltip from '@mui/material/Tooltip'\nimport IconButton from '@mui/material/IconButton'\nimport ExitToAppIcon from '@mui/icons-material/ExitToApp'\nimport { deviceListRequest } from '../../store/actions/deviceListAction'\nimport SimDetails from '../SimDetails'\nimport ReplacementDetail from '../ReplacementDetail'\n\nfunction Home({\n fuelLoading,\n fueldata,\n fuelsummary,\n summaryLoading,\n logout,\n ...props\n}) {\n const classes = homeStyles()\n const [deviceId, setDeviceId] = useState(0)\n const [selectedDate, setSelectedDate] = useState(new Date())\n const [showGraph, setShowGraph] = useState(false)\n const [phoneNumber, setPhoneNumber] = useState('')\n\n let deviceData = deviceId\n var today = getDateToday(selectedDate)\n\n const accordionData = [\n { header: 'Fuel Summary', value: },\n { header: 'App', value: },\n { header: 'Sim', value: },\n { header: 'Replacement Details', value: },\n { header: 'Installation Attempts', value: },\n { header: 'GSM GPS', value: },\n { header: 'Firebase Data', value: },\n ]\n\n const installationImageData = [\n { header: 'Device Mounting Image', value: },\n { header: 'GPS Antennta Image', value: },\n { header: 'Alternator Image', value: },\n { header: 'Fuel Connection Image', value: },\n ]\n\n const handleChange = (e) => {\n setSelectedDate(e.target.value)\n let deviceDate = e.target.value\n if (deviceId !== 0 && deviceId !== undefined) {\n let requestData = {\n device_id: deviceId,\n date: deviceDate,\n }\n props.fuelSubmit({ requestData })\n props.getDaySummary({ requestData })\n }\n }\n\n const handleShowGraph = () => {\n setShowGraph((prev) => {\n if (!prev && deviceId !== 0 && deviceId !== undefined) {\n let requestData = {\n device_id: deviceId,\n date: today,\n }\n props.getDaySummary({ requestData })\n props.fuelSubmit({ requestData })\n }\n return !prev\n })\n }\n\n const handleReset = () => {\n let requestData = {\n device_id: deviceId,\n date: today,\n }\n if (deviceId !== undefined && deviceId !== '') {\n let requestDevice = {\n device_id: deviceId,\n }\n props.getDaySummary({ requestData })\n props.fuelSubmit({ requestData })\n props.summary({ requestDevice })\n props.fuelSummary({ requestDevice })\n props.fuelModel({ requestDevice })\n props.ticket({ requestDevice })\n props.app({ requestDevice })\n props.instAttempts({ requestDevice })\n props.gsmGps({ requestDevice })\n props.instImage({ requestDevice })\n props.firebase({ requestDevice })\n props.threshold({ requestDevice })\n props.simRequest({ requestDevice })\n props.replacementDetailReq({ requestDevice })\n }\n }\n\n const handlePhoneNumber = (e) => {\n const input = e.target.value\n if (input.length <= 10) {\n setPhoneNumber(input)\n }\n }\n\n const handleDevices = () => {\n let requestDeviceList = {\n phone: phoneNumber,\n }\n props.getDeviceListByPhone({ requestDeviceList })\n }\n\n return (\n \n
\n
Internal Debug Dashboard
\n
\n
\n
\n
{\n const errors = {}\n return errors\n }}\n onSubmit={(values, { setSubmitting }) => {\n let { deviceId } = values\n setDeviceId(deviceId)\n if (deviceId !== undefined && deviceId !== '') {\n let requestDevice = {\n device_id: deviceId,\n }\n setShowGraph(false)\n // setSelectedDate(new Date());\n props.summary({ requestDevice })\n props.fuelSummary({ requestDevice })\n props.fuelModel({ requestDevice })\n props.ticket({ requestDevice })\n props.app({ requestDevice })\n props.instAttempts({ requestDevice })\n props.gsmGps({ requestDevice })\n props.instImage({ requestDevice })\n props.firebase({ requestDevice })\n props.threshold({ requestDevice })\n props.simRequest({ requestDevice })\n props.replacementDetailReq({ requestDevice })\n setSubmitting(false)\n }\n }}\n >\n {({ values, errors, touched, handleChange }) => (\n \n )}\n \n
\n
\n
\n
logout()}>\n \n \n \n \n \n
\n
\n {props.deviceList &&\n props.deviceList?.status &&\n props.deviceList?.data?.device_ids?.length > 0 ? (\n
\n
\n Device IDs :{' '}\n {props.deviceList?.data?.device_ids?.join(', ')}\n
\n
\n ) : (\n props.deviceList &&\n props.deviceList?.status && (\n
\n
\n \n There is no device ID associated with this\n number\n \n
\n
\n )\n )}\n {props.deviceList && !props.deviceList.status && (\n
\n
\n {props.deviceList?.message}\n
\n
\n )}\n {deviceId === 0 || deviceId === undefined || deviceId === '' ? (\n
\n
\n Enter a Device ID\n
\n \n ) : (\n <>\n {showGraph && (\n
\n
\n \n
\n
\n \n
\n
\n \n
\n
\n )}\n
\n
\n \n
\n
\n {accordionData.map((item, index) => (\n
\n ))}\n
\n
\n
\n
\n
\n }\n >\n \n Installation Image\n \n \n \n \n {installationImageData.map(\n (item, index) => (\n
\n )\n )}\n
\n \n \n
\n
\n
\n
\n
\n \n
\n \n >\n )}\n
\n )\n}\n\nconst mapStateToProps = (state) => ({\n fuelLoading: state.fuelReducer.loading,\n fuelmodel: state.fuelModelReducer.fuelModel,\n fueldata: state.fuelReducer.fuel,\n fuelsummary: state.fuelSummaryReducer.fuelSummary,\n summaryLoading: state.fuelSummaryReducer.loading,\n deviceList: state.deviceListReducer.resDeviceList,\n})\n\nconst mapDispatchToProps = (dispatch) => ({\n fuelSubmit: ({ requestData }) =>\n dispatch(fetchFuelRequest({ requestData })),\n summary: ({ requestDevice }) =>\n dispatch(fetchSummaryRequest({ requestDevice })),\n fuelSummary: ({ requestDevice }) =>\n dispatch(fetchFuelSummaryRequest({ requestDevice })),\n fuelModel: ({ requestDevice }) =>\n dispatch(fetchFuelModelRequest({ requestDevice })),\n ticket: ({ requestDevice }) =>\n dispatch(fetchTicketRequest({ requestDevice })),\n app: ({ requestDevice }) => dispatch(fetchAppRequest({ requestDevice })),\n instAttempts: ({ requestDevice }) =>\n dispatch(fetchInstAttemptsRequest({ requestDevice })),\n gsmGps: ({ requestDevice }) =>\n dispatch(fetchGsmGpsRequest({ requestDevice })),\n instImage: ({ requestDevice }) =>\n dispatch(fetchInstImageRequest({ requestDevice })),\n firebase: ({ requestDevice }) =>\n dispatch(fetchFirebaseDataRequest({ requestDevice })),\n threshold: ({ requestDevice }) =>\n dispatch(fetchThresholdRequest({ requestDevice })),\n getDaySummary: ({ requestData }) =>\n dispatch(daySummaryRequest({ requestData })),\n getDeviceListByPhone: ({ requestDeviceList }) =>\n dispatch(deviceListRequest({ requestDeviceList })),\n simRequest: ({ requestDevice }) =>\n dispatch(simStatusRequest({ requestDevice })),\n replacementDetailReq: ({ requestDevice }) =>\n dispatch(replacementDetailRequest({ requestDevice })),\n logout: () => {\n dispatch(logoutRequest())\n },\n})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Home)\n","import styled, { css } from \"styled-components\";\nimport { forwardRef } from \"react\";\n\n//Container\nconst ContainerWrapper = forwardRef(\n ({ className, minHeight, ...props }, ref) => (\n \n )\n);\n\nconst Container = styled(ContainerWrapper)`\n max-width: 1200px;\n width: 100%;\n margin: auto;\n padding: 0 2em;\n min-height: ${(props) => props.minHeight};\n`;\n\n//Flex\nconst FlexWrapper = forwardRef(({ className, flex, ...props }, ref) => (\n \n));\n\nconst FlexGap = css`\n flex: ${(props) => props.flex};\n`;\n\nconst RowGap = css`\n & > * + * {\n margin: 0 0 0 ${(props) => props.gap};\n }\n`;\n\nconst ColumnGap = css`\n & > * + * {\n margin: ${(props) => props.gap} 0 0 0;\n }\n`;\n\nconst Flex = styled(FlexWrapper)`\n display: flex;\n flex-direction: ${(props) => props.direction ?? \"row\"};\n align-items: ${(props) => props.align ?? \"center\"};\n justify-content: ${(props) => props.justify ?? \"space-between\"};\n /* gap: ${(props) => props.gap}; */\n ${(props) => props.flex && FlexGap}\n ${({ direction, gap }) =>\n direction && gap && direction === \"column\" && ColumnGap}\n ${({ direction, gap }) =>\n direction || (gap && direction !== \"column\" && RowGap)}\n`;\n\nlet IconWrapper = styled.span`\n width: ${(props) => props.size ?? \"80px\"};\n height: ${(props) => props.size ?? \"80px\"};\n border-radius: 50%;\n background: ${(props) => props.theme.colors[\"white-100\"]};\n display: grid;\n place-content: center;\n & > img {\n width: ${(props) =>\n props.size ? props.size.split(\"px\")[0] - 20 + \"px\" : \"30px\"};\n }\n`;\n\nexport { Flex, Container, IconWrapper };\n","export default __webpack_public_path__ + \"static/media/person.eb1d2299.svg\";","export default __webpack_public_path__ + \"static/media/lock.2593b863.svg\";","export default __webpack_public_path__ + \"static/media/home-image@2x.3458e411.jpg\";","import styled, { css } from \"styled-components\";\n\nconst InputBorder = css`\n border: 1px solid red;\n`;\n\nconst InputContainerWrapper = ({ children, className, ...props }) => (\n \n {children}\n
\n);\n\nconst InputContainer = styled(InputContainerWrapper)`\n display: flex;\n align-items: center;\n justify-content: flex-start;\n background: ${(props) => props.background ?? \"#ffffff\"};\n border-radius: 4px;\n opacity: 1;\n margin: 1em 0;\n width: ${(props) => (props.width ? props.width : \"auto\")};\n height: ${(props) => (props.height ? props.height : \"45px\")};\n margin-bottom: ${(props) => (props.error ? \"0\" : \"1em\")};\n border: ${(props) =>\n props.border === \"none\" ? \"none\" : \"1px solid #999999\"};\n ${(props) => props.error && InputBorder}\n :focus-within {\n outline: none !important;\n border: 1px solid #4d4d4d;\n }\n`;\n\nconst InputIconWrapper = ({ className, children, ...props }) => (\n \n {children}\n \n);\n\nconst InputIcon = styled(InputIconWrapper)`\n padding: 0.5em;\n & > img {\n width: 22px;\n }\n`;\n\nconst InputElementWrapper = ({ className, ...props }) => (\n \n);\n\nconst InputElement = styled(InputElementWrapper)`\n flex: 1;\n outline: none;\n border: none;\n background: none;\n font-size: 1em;\n color: #333333;\n height: 100%;\n width: ${(props) => props.width ?? \"230px\"};\n margin: ${(props) =>\n props.iconposition === \"right\" ? \"0 0 0 1em\" : \"0 1em 0 0\"};\n`;\n\nconst InputErrorWrapper = ({ children, ...props }) => (\n {children}
\n);\n\nconst InputError = styled(InputErrorWrapper)`\n font-size: 0.7em;\n width: 100%;\n text-align: left;\n color: ${(props) => props.theme.colors[\"primary\"]};\n`;\n\nexport { InputContainer, InputIcon, InputElement, InputError };\n","import React from \"react\";\nimport {\n InputContainer,\n InputIcon,\n InputElement,\n InputError,\n} from \"./Input.styled\";\n\nconst Input = ({ icon, iconPosition, error, iconClick, type, ...props }) => {\n return (\n <>\n \n {icon && iconPosition === \"left\" && (\n \n
\n \n )}\n \n\n {icon && iconPosition === \"right\" && (\n \n
\n \n )}\n \n {error && {error}}\n >\n );\n};\n\nInput.defaultProps = {\n iconPosition: \"left\",\n type: \"text\",\n};\n\nexport default Input;\n","import * as types from \"../types\";\n\nexport const loginRequest = ({ email, password }) => {\n return {\n type: types.LOGIN_REQUEST,\n payload: { email, password },\n };\n};\n\nexport const loginRequestSuccess = ({ status, message }) => {\n return {\n type: types.LOGIN_REQUEST_SUCCESS,\n status,\n message,\n };\n};\n\nexport const loginRequestFailure = ({ status, message }) => {\n return {\n type: types.LOGIN_REQUEST_FAILURE,\n status,\n message,\n };\n};\n","import { makeStyles } from \"@material-ui/core/styles\";\n\nexport const loginStyles = makeStyles((theme) => ({\n login: {\n width: \"100%\",\n height: \"100vh\",\n background: \"#ffffff\",\n },\n left: {\n flex: \"1\",\n height: \"100vh\",\n backgroundSize: \"cover\",\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n },\n submit: {\n border: \"none\",\n outline: \"none\",\n cursor: \"pointer\",\n borderRadius: \"4px\",\n fontWeight: \"bold\",\n display: \"flex\",\n alignItems: \"center\",\n padding: \"1em\",\n fontSize: \"1em\",\n width: \"100%\",\n transition: \"0.1s ease-in\",\n backgroundColor: \"#651fff\",\n color: \"white\",\n gap: \"1em\",\n },\n}));\n","import { useEffect, useState } from \"react\";\n\nimport Checkbox from \"@material-ui/core/Checkbox\";\nimport FormControlLabel from \"@material-ui/core/FormControlLabel\";\nimport CircularProgress from \"@material-ui/core/CircularProgress\";\n\nimport { Flex } from \"../../utility\";\nimport { Form, Formik } from \"formik\";\nimport { connect } from \"react-redux\";\nimport Person from \"../../assets/icons/person.svg\";\nimport Lock from \"../../assets/icons/lock.svg\";\nimport image from \"../../assets/img/home-image@2x.jpg\";\nimport Input from \"../../elements/Input\";\n\nimport { useLocation, Redirect } from \"react-router-dom\";\nimport { loginRequest } from \"../../store/actions/loginAction\";\n\nimport { loginStyles } from \"./login.styles\";\n\nconst Login = ({ isLoggedIn, loginMessage, loginLoading, ...props }) => {\n const { state } = useLocation();\n const [error, setError] = useState(null);\n\n const classes = loginStyles();\n\n useEffect(() => {\n if (!loginLoading && !isLoggedIn) {\n setError(loginMessage);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [isLoggedIn, loginLoading]);\n\n if (isLoggedIn) {\n return ;\n }\n\n return (\n \n {\n const errors = {};\n if (values.email === \"\") {\n errors.email = \"*Email is Required!\";\n } else if (values.password === \"\") {\n errors.password = \"*Password is Required\";\n }\n return errors;\n }}\n onSubmit={(values, { setSubmitting }) => {\n setError(null);\n if (values.remember) {\n localStorage.setItem(\"_u\", values.email);\n localStorage.setItem(\"_r\", true);\n } else {\n localStorage.removeItem(\"_u\");\n localStorage.removeItem(\"_r\");\n }\n props.login({ email: values.email, password: values.password });\n setSubmitting(false);\n }}\n >\n {({ values, errors, touched, handleChange }) => (\n <>\n \n
\n \n \n \n \n Welcome to Internal Debug Portal
\n Please Login Using Your AMK Credentials
\n \n \n \n \n >\n )}\n \n \n );\n};\n\nconst mapStateToProps = (state) => ({\n loginLoading: state.loginReducer.loading,\n isLoggedIn: state.loginReducer.isLoggedIn,\n loginMessage: state.loginReducer.message,\n});\n\nconst mapDispatchToProps = (dispatch) => ({\n login: ({ email, password }) => {\n dispatch(loginRequest({ email, password }));\n },\n});\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Login);\n","import React from 'react'\n\nimport { Switch, Route } from 'react-router-dom'\nimport { PrivateRoute } from '../elements'\nimport { Home, Login, Dashboard } from '../components'\n\nimport { connect } from 'react-redux'\n\nconst Routes = ({ isLoggedIn }) => {\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n \n >\n )\n}\n\nconst mapStateToProps = (state) => ({\n isLoggedIn: state.loginReducer.isLoggedIn,\n})\n\nconst mapDispatchToProps = () => ({})\n\nexport default connect(mapStateToProps, mapDispatchToProps)(Routes)\n","import React from \"react\";\nimport \"./App.css\";\nimport CssBaseline from \"@material-ui/core/CssBaseline\";\nimport {\n createMuiTheme,\n makeStyles,\n ThemeProvider,\n} from \"@material-ui/core/styles\";\nimport Routes from \"./Routes\";\n\nconst theme = createMuiTheme({\n palette: {\n // type: \"dark\",\n primary: {\n main: \"#651fff \",\n },\n secondary: {\n main: \"#A9A9A9\",\n },\n accent: {\n main: \"#F37021\",\n },\n light: {\n main: \"#FFFFFF\",\n },\n grey: {\n main: \"#FAF3FF\",\n },\n dark: {\n main: \"#575756\",\n },\n typography: {\n button: {\n textTransform: \"none\",\n },\n fontFamily: \"'Noto Sans JP', sans-serif\",\n },\n },\n});\n\nconst useStyles = makeStyles((theme) => ({\n main: {\n width: \"100%\",\n minHeight: \"100vh\",\n },\n}));\n\nconst App = () => {\n const classes = useStyles();\n return (\n \n \n \n \n \n
\n );\n};\n\nexport default App;\n","import * as types from \"../types\";\n\nconst initialState = {\n msg: null,\n status: null,\n};\n\nconst errorReducer = (state = initialState, action) => {\n switch (action.type) {\n case types.GET_ERRORS:\n return {\n ...state,\n msg: action.payload.msg,\n status: action.payload.status,\n };\n case types.CLEAR_ERRORS:\n return {\n ...state,\n msg: null,\n status: null,\n };\n default:\n return state;\n }\n};\n\nexport default errorReducer;\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n fuel: null,\n requestData: null,\n error: null,\n};\n\nexport default function fetchFuelReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_FUEL_REQUEST:\n return {\n ...state,\n loading: true,\n requestData: action.payload.requestData,\n };\n\n case types.FETCH_FUEL_SUCCESS:\n return {\n ...state,\n loading: false,\n fuel: action.payload.fuel,\n };\n\n case types.FETCH_FUEL_FAILURE:\n return {\n ...state,\n loading: false,\n fuel: null,\n requestData: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from '../types'\n\nconst initialState = {\n loading: false,\n summary: null,\n requestDevice: null,\n error: null,\n}\n\nexport default function fetchSummaryReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_SUMMARY_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n }\n\n case types.FETCH_SUMMARY_SUCCESS:\n return {\n ...state,\n loading: false,\n summary: action.payload.summary,\n }\n\n case types.FETCH_SUMMARY_FAILURE:\n return {\n ...state,\n loading: false,\n summary: null,\n requestDevice: null,\n error: action.payload.error,\n }\n\n default:\n return state\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n fuelSummary: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchFuelSummaryReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_FUEL_SUMMARY_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_FUEL_SUMMARY_SUCCESS:\n return {\n ...state,\n loading: false,\n fuelSummary: action.payload.fuelSummary,\n };\n\n case types.FETCH_FUEL_SUMMARY_FAILURE:\n return {\n ...state,\n loading: false,\n fuelSummary: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n fuelModel: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchFuelModelReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_FUEL_MODEL_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_FUEL_MODEL_SUCCESS:\n return {\n ...state,\n loading: false,\n fuelModel: action.payload.fuelModel,\n };\n\n case types.FETCH_FUEL_MODEL_FAILURE:\n return {\n ...state,\n loading: false,\n fuelModel: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n ticket: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchTicketReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_TICKET_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_TICKET_SUCCESS:\n return {\n ...state,\n loading: false,\n ticket: action.payload.ticket,\n };\n\n case types.FETCH_TICKET_FAILURE:\n return {\n ...state,\n loading: false,\n ticket: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n app: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchAppReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_APP_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_APP_SUCCESS:\n return {\n ...state,\n loading: false,\n app: action.payload.app,\n };\n\n case types.FETCH_APP_FAILURE:\n return {\n ...state,\n loading: false,\n app: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n instAttempts: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchInstAttemptsReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_INST_ATTEMPTS_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_INST_ATTEMPTS_SUCCESS:\n return {\n ...state,\n loading: false,\n instAttempts: action.payload.instAttempts,\n };\n\n case types.FETCH_INST_ATTEMPTS_FAILURE:\n return {\n ...state,\n loading: false,\n instAttempts: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n gsmGps: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchGsmGpsReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_GSM_GPS_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_GSM_GPS_SUCCESS:\n return {\n ...state,\n loading: false,\n gsmGps: action.payload.gsmGps,\n };\n\n case types.FETCH_GSM_GPS_FAILURE:\n return {\n ...state,\n loading: false,\n gsmGps: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n instImage: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchInstImageReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_INST_IMG_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_INST_IMG_SUCCESS:\n return {\n ...state,\n loading: false,\n instImage: action.payload.instImage,\n };\n\n case types.FETCH_INST_IMG_FAILURE:\n return {\n ...state,\n loading: false,\n instImage: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n firebaseData: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchFirebaseDataReducer(state = initialState, action) {\n switch (action.type) {\n case types.FETCH_FIREBASE_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_FIREBASE_SUCCESS:\n return {\n ...state,\n loading: false,\n firebaseData: action.payload.firebaseData,\n };\n\n case types.FETCH_FIREBASE_FAILURE:\n return {\n ...state,\n loading: false,\n firebaseData: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n thresholdValue: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function fetchThresholdValueReducer(\n state = initialState,\n action\n) {\n switch (action.type) {\n case types.FETCH_THRESHOLD_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.FETCH_THRESHOLD_SUCCESS:\n return {\n ...state,\n loading: false,\n thresholdValue: action.payload.thresholdValue,\n };\n\n case types.FETCH_THRESHOLD_FAILURE:\n return {\n ...state,\n loading: false,\n thresholdValue: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n area: null,\n requestData: null,\n daySummary: null,\n commutes: null,\n patches: null,\n replay: null,\n dailyStatus: null,\n totalTime: null,\n kms: null,\n // lastActive: null,\n error: null,\n};\n\nconst daySummaryReducer = (state = initialState, action) => {\n switch (action.type) {\n case types.DAY_SUMMARY_REQUEST:\n return {\n ...state,\n loading: true,\n requestData: action.payload.requestData,\n };\n case types.DAY_SUMMARY_SUCCESS:\n return {\n ...state,\n loading: false,\n area: action.payload.area,\n totalTime: action.payload.totalTime,\n kms: action.payload.kms,\n // lastActive: action.payload.lastActive,\n daySummary: action.payload.daySummary,\n commutes: action.payload.commutes,\n patches: action.payload.patches,\n replay: action.payload.replay,\n dailyStatus: action.payload.dailyStatus,\n };\n case types.DAY_SUMMARY_FAILURE:\n return {\n ...state,\n loading: false,\n requestData: null,\n daySummary: null,\n error: action.payload.error,\n };\n default:\n return state;\n }\n};\n\nexport default daySummaryReducer;\n","import * as types from '../types'\n\nconst initialState = {\n loading: false,\n isLoggedIn: false,\n status: false,\n message: null,\n error: {},\n}\n\nexport default function loginReducer(state = initialState, action) {\n switch (action.type) {\n case types.LOGIN_REQUEST:\n return {\n ...state,\n loading: true,\n error: {},\n }\n case types.LOGIN_REQUEST_SUCCESS:\n sessionStorage.setItem('loggedIn', true)\n return {\n ...state,\n loading: false,\n isLoggedIn: true,\n status: action.status,\n message: action.message,\n error: {},\n }\n case types.LOGIN_REQUEST_FAILURE:\n sessionStorage.removeItem('loggedIn')\n return {\n ...state,\n loading: false,\n isLoggedIn: false,\n status: action.status,\n message: action.message,\n user: null,\n }\n case types.LOGOUT_REQUEST:\n return {\n ...state,\n loading: true,\n }\n case types.LOGOUT_REQUEST_SUCCESS:\n sessionStorage.removeItem('loggedIn')\n localStorage.removeItem('access_token')\n localStorage.removeItem('refresh_token')\n return {\n ...state,\n loading: false,\n isLoggedIn: false,\n status: null,\n error: {},\n message: null,\n }\n case types.LOGOUT_REQUEST_FAILURE:\n return {\n ...state,\n loading: false,\n error: action.error,\n }\n default:\n return state\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n resFuelTicket: null,\n requestTicket: null,\n error: null,\n};\n\nexport default function fetchFuelTicketReducer(state = initialState, action) {\n switch (action.type) {\n case types.FUEL_TICKET_METADATA_REQUEST:\n return {\n ...state,\n loading: true,\n requestTicket: action.payload.requestTicket,\n };\n\n case types.FUEL_TICKET_METADATA_SUCCESS:\n return {\n ...state,\n loading: false,\n resFuelTicket: action.payload.resFuelTicket,\n };\n\n case types.FUEL_TICKET_METADATA_FAILURE:\n return {\n ...state,\n loading: false,\n resFuelTicket: null,\n requestTicket: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n requestCloseFuelTicket: null,\n resCloseFuelTicket: null,\n error: null,\n};\n\nexport default function fuelCloseTicketReducer(state = initialState, action) {\n switch (action.type) {\n case types.FUEL_TICKET_REQUEST:\n return {\n ...state,\n loading: true,\n requestCloseFuelTicket: action.payload.requestCloseFuelTicket,\n };\n\n case types.FUEL_TICKET_SUCCESS:\n return {\n ...state,\n loading: false,\n resCloseFuelTicket: action.payload.resCloseFuelTicket,\n };\n\n case types.FUEL_TICKET_FAILURE:\n return {\n ...state,\n loading: false,\n requestCloseFuelTicket: null,\n resCloseFuelTicket: null,\n error: action.payload.error,\n };\n\n case types.FUEL_TICKET_RESET:\n return {\n ...state,\n loading: false,\n requestCloseFuelTicket: null,\n resCloseFuelTicket: null,\n error: null,\n };\n\n default:\n return state;\n }\n}\n","import * as types from '../types'\n\nconst initialState = {\n loading: false,\n resTicket: null,\n requestTicket: null,\n error: null,\n}\n\nexport default function ticketMoreInfoReducer(state = initialState, action) {\n switch (action.type) {\n case types.TICKET_MORE_INFO_REQUEST:\n return {\n ...state,\n loading: true,\n requestTicket: action.payload.requestTicket,\n }\n\n case types.TICKET_MORE_INFO_SUCCESS:\n return {\n ...state,\n loading: false,\n resTicket: action.payload.resTicket,\n }\n\n case types.TICKET_MORE_INFO_FAILURE:\n return {\n ...state,\n loading: false,\n resTicket: null,\n requestTicket: null,\n error: action.payload.error,\n }\n\n default:\n return state\n }\n}\n","import * as types from '../types'\n\nconst initialState = {\n loading: false,\n resDeviceList: null,\n requestDeviceList: null,\n error: null,\n}\n\nexport default function deviceListReducer(state = initialState, action) {\n switch (action.type) {\n case types.DEVICE_LIST_REQUEST:\n return {\n ...state,\n loading: true,\n requestDeviceList: action.payload.requestDeviceList,\n }\n\n case types.DEVICE_LIST_SUCCESS:\n return {\n ...state,\n loading: false,\n resDeviceList: action.payload.resDeviceList,\n }\n\n case types.DEVICE_LIST_FAILURE:\n return {\n ...state,\n loading: false,\n resDeviceList: null,\n requestDeviceList: null,\n error: action.payload.error,\n }\n\n default:\n return state\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n sim: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function simStatusReducer(state = initialState, action) {\n switch (action.type) {\n case types.SIM_STATUS_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.SIM_STATUS_SUCCESS:\n return {\n ...state,\n loading: false,\n sim: action.payload.sim,\n };\n\n case types.SIM_STATUS_FAILURE:\n return {\n ...state,\n loading: false,\n sim: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import * as types from \"../types\";\n\nconst initialState = {\n loading: false,\n replacementDetail: null,\n requestDevice: null,\n error: null,\n};\n\nexport default function replacementDetailReducer(state = initialState, action) {\n switch (action.type) {\n case types.REPLACEMENT_DATA_REQUEST:\n return {\n ...state,\n loading: true,\n requestDevice: action.payload.requestDevice,\n };\n\n case types.REPLACEMENT_DATA_SUCCESS:\n return {\n ...state,\n loading: false,\n replacementDetail: action.payload.replacementDetail,\n };\n\n case types.REPLACEMENT_DATA_FAILURE:\n return {\n ...state,\n loading: false,\n replacementDetail: null,\n requestDevice: null,\n error: action.payload.error,\n };\n\n default:\n return state;\n }\n}\n","import { combineReducers } from 'redux'\nimport errorReducer from './errorReducer'\nimport fetchFuelReducer from './fetchFuelReducer'\nimport fetchSummaryReducer from './fetchSummaryReducer'\nimport fetchFuelSummaryReducer from './fetchFuelSummaryReducer'\nimport fetchFuelModelReducer from './fetchFuelModelReducer'\nimport fetchTicketReducer from './fetchTicketReducer'\nimport fetchAppReducer from './fetchAppReducer'\nimport fetchInstAttemptsReducer from './fetchInstAttemptsReducer'\nimport fetchGsmGpsReducer from './fetchGsmGpsReducer'\nimport fetchInstImageReducer from './fetchInstImageReducer'\nimport fetchFirebaseDataReducer from './fetchFirebaseDataReducer'\nimport fetchThresholdReducer from './fetchThresholdReducer'\nimport daySummaryReducer from './fetchDaySummaryReducer'\nimport loginReducer from './loginReducer'\nimport fetchFuelTicketReducer from './fetchFuelTicketReducer'\nimport fuelCloseTicketReducer from './fuelTicketReducer'\nimport ticketMoreInfoReducer from './ticketMoreInfoReducer'\nimport deviceListReducer from './deviceListReducer'\nimport simStatusReducer from './simStatusReducer'\nimport replacementDetailReducer from './replacementDetailReducer'\n\nimport { persistReducer } from 'redux-persist'\nimport storage from 'redux-persist/lib/storage'\n\nconst persistConfig = {\n key: 'root',\n storage: storage,\n blacklist: [\n 'fuelReducer',\n 'summaryReducer',\n 'fuelSummaryReducer',\n 'fuelModelReducer',\n 'fuelCulpritReducer',\n 'ticketReducer',\n 'appReducer',\n 'instAttemptsReducer',\n 'firebaseReducer',\n 'thresholdReducer',\n 'daySummData',\n 'fuelTicketReducer',\n 'fuelCloseTicketReducer',\n 'simStatusReducer',\n 'replacementDetailReducer',\n 'deviceListReducer',\n ],\n}\n\nconst rootReducer = combineReducers({\n errorReducer,\n fuelReducer: fetchFuelReducer,\n summaryReducer: fetchSummaryReducer,\n fuelSummaryReducer: fetchFuelSummaryReducer,\n fuelModelReducer: fetchFuelModelReducer,\n ticketReducer: fetchTicketReducer,\n appReducer: fetchAppReducer,\n instAttemptsReducer: fetchInstAttemptsReducer,\n gsmGpsReducer: fetchGsmGpsReducer,\n instImageReducer: fetchInstImageReducer,\n firebaseReducer: fetchFirebaseDataReducer,\n thresholdReducer: fetchThresholdReducer,\n daySummData: daySummaryReducer,\n fuelTicketReducer: fetchFuelTicketReducer,\n fuelCloseTicketReducer,\n ticketMoreInfoReducer,\n deviceListReducer,\n simStatusReducer,\n replacementDetailReducer,\n loginReducer,\n})\n\nexport default persistReducer(persistConfig, rootReducer)\n","import * as types from \"../types\";\n\nexport const returnErrors = ({ msg, status }) => {\n return {\n type: types.GET_ERRORS,\n payload: { msg, status },\n };\n};\n\nexport const clearErrors = () => {\n return {\n type: types.CLEAR_ERRORS,\n };\n};\n","export const API_ROUTES = {\n LOGIN: '/cms/tech/api/login/',\n FUELS: '/debug/get_trip_info/',\n DEVICE_SUMMARY: '/debug/dev/idp/summary/',\n DEVICE_FUEL_SUMMARY: '/debug/get_fuel_summary/',\n MODEL: '/debug/get_fuel_model/',\n DEVICE_TICKET: '/debug/get_ticket_summary/',\n APP: '/debug/get_app_data/',\n INSTALLATION: '/debug/get_inst_attempts/',\n GSM_GPS: '/debug/get_gsm_info/',\n INSTALLATION_IMAGE: '/debug/get_installation_images/',\n FIREBASE: '/cms/check_presence/',\n THRESHOLD: '/debug/get_vbat_thr/',\n REFRESH_ACCESS_TOKEN: '/users/refresh_access_token/',\n CLOSE_TICKET: '/cms/close_ticket/',\n FUEL_TICKET: '/cms/get_fuel_ticket_metadata/',\n TICKET_MORE_INFO: '/cms/support_history/',\n DEVICE_LIST: '/debug/get_devices_by_phone/',\n SIM: '/debug/get_sim_summary/',\n REPLACEMENT_DETAIL: '/debug/get_replacement_summary/',\n}\n\nexport const API_BASE_URL = {\n LOGIN_URL: process.env.REACT_APP_INTERNALS\n ? process.env.REACT_APP_INTERNALS\n : 'https://staging.carnot-traclytics.com',\n DATA_URL: process.env.REACT_APP_DATA\n ? process.env.REACT_APP_DATA\n : 'https://staging.carnot-traclytics.com',\n FIELD_URL: process.env.REACT_FIELD_URL\n ? process.env.REACT_FIELD_URL\n : 'https://field-lambda.carnot-traclytics.com',\n}\n","import axios from 'axios'\nimport { parseDayDetails } from '../utils'\nimport { API_ROUTES, API_BASE_URL } from '../config'\nimport { store } from '../store'\nimport { logoutRequest } from '../store/actions/logoutAction'\n\n// const headerParams = { 'app-version': 26.6 }\nconst headerJWTParams = {\n 'app-build': 'testapp',\n 'app-version': '24.5',\n platform: 'Android',\n}\n\nconst axiosInstance = axios.create({\n baseURL: API_BASE_URL.DATA_URL,\n headers: {\n ...headerJWTParams,\n },\n})\n\naxiosInstance.interceptors.request.use(\n (config) => {\n const token = localStorage.getItem('access_token')\n if (token) {\n config.headers['User-Auth'] = `Bearer ${token}`\n }\n return config\n },\n (error) => {\n return Promise.reject(error)\n }\n)\n\naxiosInstance.interceptors.response.use(\n (response) => response,\n async (error) => {\n if (error.response && error.response.status === 401) {\n try {\n const refreshed = await getRefreshAccessToken()\n if (refreshed) {\n const originalRequest = error.config\n originalRequest.headers[\n 'User-Auth'\n ] = `Bearer ${localStorage.getItem('access_token')}`\n return axiosInstance(originalRequest)\n }\n } catch (refreshError) {\n throw refreshError\n }\n }\n throw error\n }\n)\n\nexport const loginUser = async ({ email, password }) => {\n try {\n const { data } = await axios({\n method: 'post',\n url: `${API_BASE_URL.LOGIN_URL}${API_ROUTES.LOGIN}`,\n data: JSON.stringify({ user_id: email, user_pwd: password }),\n headers: {\n 'content-type': 'application/json',\n },\n })\n return data\n } catch (error) {\n console.err(error)\n throw error\n }\n}\n\nexport const fuels = async ({ requestData }) => {\n try {\n const { data } = await axiosInstance.post(\n `${API_ROUTES.FUELS}`,\n requestData\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceSummary = async ({ requestDevice }) => {\n try {\n let { device_id: device } = requestDevice\n const { data } = await axiosInstance.post(\n `${API_ROUTES.DEVICE_SUMMARY}${device}/`,\n requestDevice\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceFuelSummary = async ({ requestDevice }) => {\n try {\n let { device_id: device } = requestDevice\n const { data } = await axiosInstance.get(\n `${API_ROUTES.DEVICE_FUEL_SUMMARY}${device}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceFuelModel = async ({ requestDevice }) => {\n try {\n let { device_id: device } = requestDevice\n const { data } = await axiosInstance.get(\n `${API_ROUTES.MODEL}${device}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceTicket = async ({ requestDevice }) => {\n try {\n let { device_id: device } = requestDevice\n const { data } = await axiosInstance.get(\n `${API_ROUTES.DEVICE_TICKET}${device}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceApp = async ({ requestDevice }) => {\n try {\n let device = requestDevice.device_id\n const { data } = await axiosInstance.get(`${API_ROUTES.APP}${device}/`)\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceAttempts = async ({ requestDevice }) => {\n try {\n let { device_id: device } = requestDevice\n const { data } = await axiosInstance.get(\n `${API_ROUTES.INSTALLATION}${device}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceGsmGps = async ({ requestDevice }) => {\n try {\n let { device_id: device } = requestDevice\n const { data } = await axiosInstance.get(\n `${API_ROUTES.GSM_GPS}${device}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceInstImg = async ({ requestDevice }) => {\n try {\n let { device_id: device } = requestDevice\n const { data } = await axiosInstance.get(\n `${API_ROUTES.INSTALLATION_IMAGE}${device}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const firebaseData = async ({ requestDevice }) => {\n try {\n let device = requestDevice.device_id\n const { data } = await axios({\n method: 'post',\n url: `${API_BASE_URL.DATA_URL}${API_ROUTES.FIREBASE}${device}`,\n data: requestDevice,\n })\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const thresholdValue = async ({ requestDevice }) => {\n try {\n let { device_id: device } = requestDevice\n const { data } = await axiosInstance.get(\n `${API_ROUTES.THRESHOLD}${device}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const fetchDaySummary = async ({ requestData }) => {\n let deviceId = requestData.device_id\n let date = new Date(requestData.date)\n let month = date.getMonth() + 1\n let year = date.getFullYear()\n let today = date.getDate()\n if (month < 10) {\n month = '0' + month\n }\n\n if (today < 10) {\n today = '0' + today\n }\n\n const { data } = await axiosInstance.get(\n `/data/summary/day/${deviceId}/${year}/${month}/${today}/0/`\n )\n\n return data\n}\n\nexport const fetchDayDetail = async ({ deviceId, date }) => {\n let datee = new Date(date)\n let month = datee.getMonth() + 1\n let year = datee.getFullYear()\n let today = datee.getDate()\n\n if (month < 10) {\n month = '0' + month\n }\n\n if (today < 10) {\n today = '0' + today\n }\n\n const {\n data: { data },\n } = await axiosInstance.get(\n `/data/details/day/${deviceId}/${year}/${month}/${today}/0/`\n )\n return parseDayDetails(data)\n}\n\nexport const getRefreshAccessToken = async () => {\n try {\n const { data } = await axios({\n method: 'post',\n url: `${API_BASE_URL.DATA_URL}${API_ROUTES.REFRESH_ACCESS_TOKEN}`,\n headers: {\n ...headerJWTParams,\n 'User-Auth': `Bearer ${localStorage.getItem('refresh_token')}`,\n },\n })\n localStorage.setItem('access_token', data.access_token)\n return true\n } catch (error) {\n sessionStorage.setItem('loggedIn', false)\n localStorage.removeItem('access_token')\n localStorage.removeItem('refresh_token')\n store.dispatch(logoutRequest())\n throw error\n }\n}\n\nexport const getFuelTicket = async ({ requestTicket }) => {\n const { data } = await axiosInstance.get(\n `${API_ROUTES.FUEL_TICKET}${requestTicket.id}/`\n )\n\n return data\n}\n\nexport const closeFuelTicket = async ({ requestCloseFuelTicket }) => {\n try {\n const { data } = await axiosInstance.post(\n `${API_ROUTES.CLOSE_TICKET}`,\n requestCloseFuelTicket\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const ticketMoreInfo = async ({ requestTicket }) => {\n try {\n let { ticket_id: ticket } = requestTicket\n const { data } = await axiosInstance.get(\n `${API_ROUTES.TICKET_MORE_INFO}${ticket}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const getDeviceList = async ({ requestDeviceList }) => {\n try {\n const { data } = await axiosInstance.post(\n `${API_ROUTES.DEVICE_LIST}`,\n requestDeviceList\n )\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const deviceSim = async ({ requestDevice }) => {\n try {\n let device = requestDevice.device_id\n const { data } = await axiosInstance.get(`${API_ROUTES.SIM}${device}/`)\n return data\n } catch (error) {\n throw error\n }\n}\n\nexport const getReplacementDetail = async ({ requestDevice }) => {\n try {\n let device = requestDevice.device_id\n const { data } = await axiosInstance.get(\n `${API_ROUTES.REPLACEMENT_DETAIL}${device}/`\n )\n return data\n } catch (error) {\n throw error\n }\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchFuelFailure,\n fetchFuelSuccess,\n} from \"../actions/fetchfuelsAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchFuelSaga(action) {\n try {\n yield put(clearErrors());\n let fuel = yield call(_api.fuels, {\n requestData: action.payload.requestData,\n });\n // console.log(\"fuel \", fuel);\n yield put(fetchFuelSuccess({ fuel }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchFuelFailure({ error: e }));\n }\n}\nexport default function* fetchFuelSaga() {\n yield takeLatest(types.FETCH_FUEL_REQUEST, asyncFetchFuelSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchSummaryFailure,\n fetchSummarySuccess,\n} from \"../actions/fetchSummaryAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchSummarySaga(action) {\n try {\n yield put(clearErrors());\n let summary = yield call(_api.deviceSummary, {\n requestDevice: action.payload.requestDevice,\n });\n // console.log(\"summary \", summary);\n yield put(fetchSummarySuccess({ summary }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchSummaryFailure({ error: e }));\n }\n}\nexport default function* fetchSummarySaga() {\n yield takeLatest(types.FETCH_SUMMARY_REQUEST, asyncFetchSummarySaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchFuelSummaryFailure,\n fetchFuelSummarySuccess,\n} from \"../actions/fetchFuelSummaryAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchFuelSummarySaga(action) {\n try {\n yield put(clearErrors());\n let fuelSummary = yield call(_api.deviceFuelSummary, {\n requestDevice: action.payload.requestDevice,\n });\n // console.log(\"fuelSummary \", fuelSummary);\n yield put(fetchFuelSummarySuccess({ fuelSummary }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchFuelSummaryFailure({ error: e }));\n }\n}\nexport default function* fetchFuelSummarySaga() {\n yield takeLatest(types.FETCH_FUEL_SUMMARY_REQUEST, asyncFetchFuelSummarySaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchFuelModelFailure,\n fetchFuelModelSuccess,\n} from \"../actions/fetchFuelModelAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchFuelModelSaga(action) {\n try {\n yield put(clearErrors());\n let fuelModel = yield call(_api.deviceFuelModel, {\n requestDevice: action.payload.requestDevice,\n });\n yield put(fetchFuelModelSuccess({ fuelModel }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchFuelModelFailure({ error: e }));\n }\n}\nexport default function* fetchFuelModelSaga() {\n yield takeLatest(types.FETCH_FUEL_MODEL_REQUEST, asyncFetchFuelModelSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchTicketFailure,\n fetchTicketSuccess,\n} from \"../actions/fetchTicketAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchTicketSaga(action) {\n try {\n yield put(clearErrors());\n let ticket = yield call(_api.deviceTicket, {\n requestDevice: action.payload.requestDevice,\n });\n // console.log(\"realtime \", realtime);\n yield put(fetchTicketSuccess({ ticket }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchTicketFailure({ error: e }));\n }\n}\nexport default function* fetchRealtimeSaga() {\n yield takeLatest(types.FETCH_TICKET_REQUEST, asyncFetchTicketSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport { fetchAppFailure, fetchAppSuccess } from \"../actions/fetchAppAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchAppSaga(action) {\n try {\n yield put(clearErrors());\n let app = yield call(_api.deviceApp, {\n requestDevice: action.payload.requestDevice,\n });\n // console.log(\"app \", app);\n yield put(fetchAppSuccess({ app }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchAppFailure({ error: e }));\n }\n}\nexport default function* fetchAppSaga() {\n yield takeLatest(types.FETCH_APP_REQUEST, asyncFetchAppSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchInstAttemptsFailure,\n fetchInstAttemptsSuccess,\n} from \"../actions/fetchInstAttemptsAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchInstAttemptsSaga(action) {\n try {\n yield put(clearErrors());\n let instAttempts = yield call(_api.deviceAttempts, {\n requestDevice: action.payload.requestDevice,\n });\n // console.log(\"realtime \", realtime);\n yield put(fetchInstAttemptsSuccess({ instAttempts }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchInstAttemptsFailure({ error: e }));\n }\n}\nexport default function* fetchInstAttemptsSaga() {\n yield takeLatest(\n types.FETCH_INST_ATTEMPTS_REQUEST,\n asyncFetchInstAttemptsSaga\n );\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchGsmGpsFailure,\n fetchGsmGpsSuccess,\n} from \"../actions/fetchGsmGpsAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchGsmGpsSaga(action) {\n try {\n yield put(clearErrors());\n let gsmGps = yield call(_api.deviceGsmGps, {\n requestDevice: action.payload.requestDevice,\n });\n // console.log(\"gsmgps \", gsmGps);\n yield put(fetchGsmGpsSuccess({ gsmGps }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchGsmGpsFailure({ error: e }));\n }\n}\nexport default function* fetchGsmGpsSaga() {\n yield takeLatest(types.FETCH_GSM_GPS_REQUEST, asyncFetchGsmGpsSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchInstImageFailure,\n fetchInstImageSuccess,\n} from \"../actions/fetchInstImageAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchInstImageSaga(action) {\n try {\n yield put(clearErrors());\n let instImage = yield call(_api.deviceInstImg, {\n requestDevice: action.payload.requestDevice,\n });\n yield put(fetchInstImageSuccess({ instImage }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchInstImageFailure({ error: e }));\n }\n}\nexport default function* fetchInstImageSaga() {\n yield takeLatest(types.FETCH_INST_IMG_REQUEST, asyncFetchInstImageSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchFirebaseDataFailure,\n fetchFirebaseDataSuccess,\n} from \"../actions/fetchFirebaseDataAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchFirebaseDataSaga(action) {\n try {\n yield put(clearErrors());\n let firebaseData = yield call(_api.firebaseData, {\n requestDevice: action.payload.requestDevice,\n });\n yield put(fetchFirebaseDataSuccess({ firebaseData }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchFirebaseDataFailure({ error: e }));\n }\n}\nexport default function* fetchFirebaseDataSaga() {\n yield takeLatest(types.FETCH_FIREBASE_REQUEST, asyncFetchFirebaseDataSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport {\n fetchThresholdFailure,\n fetchThresholdSuccess,\n} from \"../actions/fetchThresholdValueAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchThresholdSaga(action) {\n try {\n yield put(clearErrors());\n let thresholdValue = yield call(_api.thresholdValue, {\n requestDevice: action.payload.requestDevice,\n });\n yield put(fetchThresholdSuccess({ thresholdValue }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchThresholdFailure({ error: e }));\n }\n}\nexport default function* fetchThresholdSaga() {\n yield takeLatest(types.FETCH_THRESHOLD_REQUEST, asyncFetchThresholdSaga);\n}\n","import { call, put, takeLatest } from \"redux-saga/effects\";\nimport * as types from \"../types\";\nimport { parseDaySummary, tripTimeFromDaySummary } from \"../../utils\";\n\nimport {\n daySummarySuccess,\n daySummaryFailure,\n} from \"../actions/fetchDaySummaryAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\n\nconst SQR_MTS_ACRES = 0.000247105;\n\nfunction* asyncDaySummary(action) {\n let data = \"NA\",\n area = \"NA\",\n totalTime = \"NA\",\n kms = \"NA\",\n dailyStatus,\n commutes,\n patches,\n replay;\n try {\n yield put(clearErrors());\n const daySummary = yield call(_api.fetchDaySummary, {\n requestData: action.payload.requestData,\n });\n // console.log(\"fetchDaySummary : \", daySummary);\n\n if (daySummary && daySummary.status) {\n let commutePatchesLength = 0;\n for (let key of Object.keys(daySummary.data.commutes)) {\n commutePatchesLength =\n commutePatchesLength + daySummary.data.commutes[key].length;\n }\n if (commutePatchesLength > 0) {\n dailyStatus = daySummary.status;\n data = parseDaySummary(daySummary);\n\n area = (data.area * SQR_MTS_ACRES).toFixed(2);\n totalTime = tripTimeFromDaySummary(\n data.haulage_time + data.idling_time + data.job_time\n );\n kms = (data.distance / 1000).toFixed(2);\n\n const res2 = yield call(_api.fetchDayDetail, {\n deviceId: data.device_fk_id,\n date: action.payload.requestData.date,\n });\n // console.log(\"res2 : \", res2);\n\n commutes = res2.commutes;\n patches = res2.patches;\n replay = res2.replay;\n }\n }\n\n yield put(\n daySummarySuccess({\n daySummary,\n commutes,\n patches,\n replay,\n dailyStatus,\n area,\n totalTime,\n kms,\n })\n );\n } catch (e) {\n // console.log(e);\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(daySummaryFailure(e));\n }\n}\n\nexport default function* daySummaryRequestSaga() {\n yield takeLatest(types.DAY_SUMMARY_REQUEST, asyncDaySummary);\n}\n","import { call, put, takeLatest } from 'redux-saga/effects'\nimport * as types from '../types'\nimport {\n loginRequestSuccess,\n loginRequestFailure,\n} from '../actions/loginAction'\nimport {\n logoutRequestSuccess,\n logoutRequestFailure,\n} from '../actions/logoutAction'\nimport { returnErrors, clearErrors } from '../actions/errorAction'\nimport * as _api from '../../api'\n\nfunction* asyncLoginRequest(action) {\n try {\n yield put(clearErrors())\n const res = yield call(_api.loginUser, {\n email: action.payload.email,\n password: action.payload.password,\n })\n if (res.status) {\n localStorage.setItem(\n 'access_token',\n res.data.auth_tokens.access_token\n )\n localStorage.setItem(\n 'refresh_token',\n res.data.auth_tokens.refresh_token\n )\n yield put(\n loginRequestSuccess({\n status: res.status,\n message: res.message,\n })\n )\n } else {\n yield put(\n loginRequestFailure({\n status: res.status,\n message: res.message,\n })\n )\n }\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }))\n yield put(loginRequestFailure({ status: false, message: e.message }))\n }\n}\n\nfunction* asyncLogoutRequest(action) {\n try {\n yield put(logoutRequestSuccess())\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }))\n yield put(logoutRequestFailure(e))\n }\n}\n\nexport default function* loginRequestSaga() {\n yield put(clearErrors())\n yield takeLatest(types.LOGIN_REQUEST, asyncLoginRequest)\n}\n\nexport function* logoutRequestSaga() {\n yield takeLatest(types.LOGOUT_REQUEST, asyncLogoutRequest)\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport { fetchFuelTicketSuccess, fetchFuelTicketFailure } from \"../actions/fetchfuelTicketAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFetchFuelTicketSaga(action) {\n try {\n yield put(clearErrors());\n let resFuelTicket = yield call(_api.getFuelTicket, {\n requestTicket: action.payload.requestTicket,\n });\n yield put(fetchFuelTicketSuccess({ resFuelTicket }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fetchFuelTicketFailure({ error: e }));\n }\n}\nexport default function* fetchFuelTicketSaga() {\n yield takeLatest(types.FUEL_TICKET_METADATA_REQUEST, asyncFetchFuelTicketSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport { fuelCloseTicketSuccess, fuelCloseTicketFailure } from \"../actions/fuelTicketAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncFuelCloseTicketSaga(action) {\n try {\n yield put(clearErrors());\n let resCloseFuelTicket = yield call(_api.closeFuelTicket, {\n requestCloseFuelTicket: action.payload.requestCloseFuelTicket,\n });\n yield put(fuelCloseTicketSuccess({ resCloseFuelTicket }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(fuelCloseTicketFailure({ error: e }));\n }\n}\nexport default function* fuelCloseTicketSaga() {\n yield takeLatest(types.FUEL_TICKET_REQUEST, asyncFuelCloseTicketSaga);\n}\n","import { takeLatest, call, put } from 'redux-saga/effects'\nimport {\n fetchTicketMoreInfoSuccess,\n fetchTicketMoreInfoFailure,\n} from '../actions/ticketMoreInfoAction'\nimport { returnErrors, clearErrors } from '../actions/errorAction'\nimport * as _api from '../../api'\nimport * as types from '../types'\n\nfunction* asyncTicketMoreInfoSaga(action) {\n try {\n yield put(clearErrors())\n let resTicket = yield call(_api.ticketMoreInfo, {\n requestTicket: action.payload.requestTicket,\n })\n yield put(fetchTicketMoreInfoSuccess({ resTicket }))\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }))\n yield put(fetchTicketMoreInfoFailure({ error: e }))\n }\n}\nexport default function* fetchTicketMoreInfoSaga() {\n yield takeLatest(types.TICKET_MORE_INFO_REQUEST, asyncTicketMoreInfoSaga)\n}\n","import { takeLatest, call, put } from 'redux-saga/effects'\nimport {\n deviceListSuccess,\n deviceListFailure,\n} from '../actions/deviceListAction'\nimport { returnErrors, clearErrors } from '../actions/errorAction'\nimport * as _api from '../../api'\nimport * as types from '../types'\n\nfunction* asyncDeviceListSaga(action) {\n try {\n yield put(clearErrors())\n let resDeviceList = yield call(_api.getDeviceList, {\n requestDeviceList: action.payload.requestDeviceList,\n })\n yield put(deviceListSuccess({ resDeviceList }))\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }))\n yield put(deviceListFailure({ error: e }))\n }\n}\nexport default function* deviceListSaga() {\n yield takeLatest(types.DEVICE_LIST_REQUEST, asyncDeviceListSaga)\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport { simStatusFailure, simStatusSuccess } from \"../actions/simStatusAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncSimStatusSaga(action) {\n try {\n yield put(clearErrors());\n let sim = yield call(_api.deviceSim, {\n requestDevice: action.payload.requestDevice,\n });\n yield put(simStatusSuccess({ sim }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(simStatusFailure({ error: e }));\n }\n}\nexport default function* simStatusSaga() {\n yield takeLatest(types.SIM_STATUS_REQUEST, asyncSimStatusSaga);\n}\n","import { takeLatest, call, put } from \"redux-saga/effects\";\nimport { replacementDetailFailure, replacementDetailSuccess } from \"../actions/replacemetDetailAction\";\nimport { returnErrors, clearErrors } from \"../actions/errorAction\";\nimport * as _api from \"../../api\";\nimport * as types from \"../types\";\n\nfunction* asyncReplacementDetailSaga(action) {\n try {\n yield put(clearErrors());\n let replacementDetail = yield call(_api.getReplacementDetail, {\n requestDevice: action.payload.requestDevice,\n });\n yield put(replacementDetailSuccess({ replacementDetail }));\n } catch (e) {\n yield put(returnErrors({ msg: e.message, status: true }));\n yield put(replacementDetailFailure({ error: e }));\n }\n}\nexport default function* replacementDetailSaga() {\n yield takeLatest(types.REPLACEMENT_DATA_REQUEST, asyncReplacementDetailSaga);\n}\n","import { all } from 'redux-saga/effects'\nimport fetchFuelSaga from './fetchFuelSaga'\nimport fetchSummarySaga from './fetchSummarySaga'\nimport fetchFuelSummarySaga from './fetchFuelSummarySaga'\nimport fetchFuelModelSaga from './fetchFuelModelSaga'\nimport fetchTicketSaga from './fetchTicketSaga'\nimport fetchAppSaga from './fetchAppSaga'\nimport fetchInstAttemptsSaga from './fetchInstAttemptsSaga'\nimport fetchGsmGpsSaga from './fetchGsmGpsSaga'\nimport fetchInstImageSaga from './fetchInstImageSaga'\nimport fetchFirebaseDataSaga from './fetchFirebaseDataSaga'\nimport fetchThresholdSaga from './fetchThresholdSaga'\nimport daySummaryRequestSaga from './fetchDaySummarySaga'\nimport loginRequestSaga, { logoutRequestSaga } from './loginSaga'\nimport fetchFuelTicketSaga from './fetchFuelTicketSaga'\nimport fuelCloseTicketSaga from './fuelTicketSaga'\nimport fetchTicketMoreInfoSaga from './ticketMoreInfoSaga'\nimport deviceListSaga from './deviceListSaga'\nimport simStatusSaga from './simStatusSaga'\nimport replacementDetailSaga from './replacementDetailSaga'\n\nexport default function* rootSaga() {\n yield all([\n fetchFuelSaga(),\n fetchSummarySaga(),\n fetchFuelSummarySaga(),\n fetchFuelModelSaga(),\n fetchTicketSaga(),\n fetchAppSaga(),\n fetchInstAttemptsSaga(),\n fetchGsmGpsSaga(),\n fetchInstImageSaga(),\n fetchFirebaseDataSaga(),\n fetchThresholdSaga(),\n daySummaryRequestSaga(),\n loginRequestSaga(),\n logoutRequestSaga(),\n fetchFuelTicketSaga(),\n fuelCloseTicketSaga(),\n simStatusSaga(),\n replacementDetailSaga(),\n fetchTicketMoreInfoSaga(),\n deviceListSaga(),\n ])\n}\n","import { createStore, applyMiddleware } from \"redux\";\nimport { composeWithDevTools } from \"redux-devtools-extension\";\nimport createSagaMiddleware from \"redux-saga\";\nimport rootReducer from \"./reducers\";\nimport rootSaga from \"./sagas\";\n\nimport { persistStore } from \"redux-persist\";\n\nconst sagaMiddleware = createSagaMiddleware();\n\nconst store = createStore(\n rootReducer,\n composeWithDevTools(applyMiddleware(sagaMiddleware))\n);\n\nlet persistor = persistStore(store);\nsagaMiddleware.run(rootSaga);\n\nexport { store, persistor };\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport App from \"./App\";\nimport { Provider } from \"react-redux\";\nimport { store, persistor } from \"./store\";\nimport { BrowserRouter as Router } from \"react-router-dom\";\nimport { PersistGate } from \"redux-persist/integration/react\";\n\nReactDOM.render(\n \n \n \n \n \n \n ,\n document.getElementById(\"root\")\n);\n"],"sourceRoot":""}