{"version":3,"file":"index.bundle.js","mappings":"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","sources":["webpack://tripview/webpack/runtime/chunk loaded","webpack://tripview/webpack/runtime/create fake namespace object","webpack://tripview/../../../jsmodules/gstjs/src/api.js","webpack://tripview/../../../jsmodules/gstjs2/backend/ui.js","webpack://tripview/./src/api/api.js","webpack://tripview/./src/DeviceTracks.js","webpack://tripview/./src/DisplayedTrack.js","webpack://tripview/./src/ExportDialog.js","webpack://tripview/./src/TimePopper.js","webpack://tripview/./src/components/DeviceMarker.jsx","webpack://tripview/./src/MenuDeviceList.js","webpack://tripview/./src/TimelineControl.js","webpack://tripview/./src/TitleBar.js","webpack://tripview/./src/TripView.js","webpack://tripview/./src/index.js","webpack://tripview/./node_modules/moment/locale/ sync ^\\.\\/.*$","webpack://tripview/webpack/bootstrap","webpack://tripview/webpack/runtime/compat get default export","webpack://tripview/webpack/runtime/define property getters","webpack://tripview/webpack/runtime/global","webpack://tripview/webpack/runtime/hasOwnProperty shorthand","webpack://tripview/webpack/runtime/make namespace object","webpack://tripview/webpack/runtime/node module decorator","webpack://tripview/webpack/runtime/publicPath","webpack://tripview/webpack/runtime/jsonp chunk loading","webpack://tripview/webpack/startup"],"sourcesContent":["var deferred = [];\n__webpack_require__.O = (result, chunkIds, fn, priority) => {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar [chunkIds, fn, priority] = deferred[i];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every((key) => (__webpack_require__.O[key](chunkIds[j])))) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tvar r = fn();\n\t\t\tif (r !== undefined) result = r;\n\t\t}\n\t}\n\treturn result;\n};","var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);\nvar leafPrototypes;\n// create a fake namespace object\n// mode & 1: value is a module id, require it\n// mode & 2: merge all properties of value into the ns\n// mode & 4: return value when already ns object\n// mode & 16: return value when it's Promise-like\n// mode & 8|1: behave like require\n__webpack_require__.t = function(value, mode) {\n\tif(mode & 1) value = this(value);\n\tif(mode & 8) return value;\n\tif(typeof value === 'object' && value) {\n\t\tif((mode & 4) && value.__esModule) return value;\n\t\tif((mode & 16) && typeof value.then === 'function') return value;\n\t}\n\tvar ns = Object.create(null);\n\t__webpack_require__.r(ns);\n\tvar def = {};\n\tleafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];\n\tfor(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {\n\t\tObject.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));\n\t}\n\tdef['default'] = () => (value);\n\t__webpack_require__.d(ns, def);\n\treturn ns;\n};","//import fetch from 'isomorphic-fetch'\n\nimport { ActionInit } from './actions';\n\nconst shapeColors = {\n safe: \"#006600\",\n rest: \"#0000cc\",\n danger: \"#cc0000\"\n};\n\nconst shapeColorsHigh = {\n safe: \"#00e600\",\n rest: \"#6666ff\",\n danger: \"#ff6666\"\n};\n\nlet token = null;\nlet app = null;\n\nfunction fetchInit(method, token, body, ct) {\n if (!ct) ct = \"application/json\";\n let h = new Headers({\n \"Content-Type\": ct,\n \"Authorization\": token,\n });\n let res = {\n method: method,\n headers: h,\n cache: 'default'\n };\n if (body) {\n if (ct == \"application/json\")\n res.body = JSON.stringify(body);\n else\n res.body = body;\n }\n return res;\n}\n\nfunction check(rsp) {\n if (rsp.ok) {\n return rsp.json();\n }\n if (rsp.status == 404) {\n return Promise.resolve(null);\n }\n if (rsp.status == 401) {\n if (app)\n location.href = `/?page=${app}`;\n else\n location.href = \"/\";\n }\n return rsp.json().then((e) => {\n return Promise.reject({ status: rsp.status, text: e.error });\n });\n}\n\nexport function logRecord(r) {\n fetch(\"/logrecord.json\", fetchInit(\"POST\", \"\", r));\n}\n\nexport function getParameters() {\n var query_string = {};\n var query = window.location.search.substring(1);\n var vars = query.split(\"&\");\n for (var i = 0; i < vars.length; i++) {\n var pair = vars[i].split(\"=\");\n // If first entry with this name\n if (typeof query_string[pair[0]] === \"undefined\") {\n query_string[pair[0]] = decodeURIComponent(pair[1]);\n // If second entry with this name\n } else if (typeof query_string[pair[0]] === \"string\") {\n var arr = [query_string[pair[0]], decodeURIComponent(pair[1])];\n query_string[pair[0]] = arr;\n // If third or later entry with this name\n } else {\n query_string[pair[0]].push(decodeURIComponent(pair[1]));\n }\n }\n return query_string;\n}\n\nexport function getParameter(key) {\n return getParameters()[key];\n}\n\nexport function Init(usr, tok, myapp, selectedorg) {\n app = myapp;\n return User.me(tok)\n .then(ud => {\n token = tok;\n ActionInit(tok);\n logRecord({ \"loginresult\": { \"userid\": ud.id, \"username\": ud.name, \"userorg\": ud.organization, \"provideruser\": ud.user, \"uiapp\": myapp } });\n let prs = [User.organization({ id: ud.organization })];\n if (selectedorg) {\n prs.push(User.organization({ id: selectedorg.id }))\n }\n return Promise.all(prs).then((values) => {\n if (values.length > 1) {\n return Promise.resolve({ user: usr, me: ud, org: values[1], userorg: values[0] })\n }\n return Promise.resolve({ user: usr, me: ud, org: values[0], userorg: values[0] })\n });\n })\n}\n\nexport function Anonymous() {\n token = \"GUEST\";\n ActionInit(token);\n}\n\nexport function identity(d) { return Promise.resolve(d); }\n\nexport function parseDate(dt) {\n if (!dt) return null;\n\n let res = new Date(dt);\n if (res.getFullYear() === 1) {\n return null;\n }\n return date2UTC(res);\n}\n\nexport function date2Stamp(d) {\n let dd = asUTC(d)\n let dt = dd.getUTCDate() + \"-\" + dd.getUTCMonth() + \"-\" + dd.getUTCFullYear();\n return dt;\n}\n\nexport function stamp2Date(st) {\n let parts = st.split(\"-\");\n return new Date(parts[2], parts[1], parts[0]);\n}\n\nexport function formatDate(dat, withtime) {\n let dt = asUTC(dat);\n let d = (\"00\" + dt.getUTCDate()).slice(-2);\n let m = (\"00\" + (dt.getUTCMonth() + 1)).slice(-2);\n let y = dt.getUTCFullYear();\n let hh = (\"00\" + dt.getHours()).slice(-2);\n let mm = (\"00\" + dt.getMinutes()).slice(-2);\n let ss = (\"00\" + dt.getSeconds()).slice(-2);\n\n let fmt = `${y}-${m}-${d}`;\n\n if (withtime) {\n fmt = `${y}-${m}-${d} ${hh}:${mm}:${ss}`;\n }\n\n //console.log(\"dt = \", dt, \"dat=\", dat, \"fmt = \",fmt);\n return fmt;\n}\n\nexport function formatLocalDate(dat, withtime, asInputFormat) {\n let dt = dat;\n let d = (\"00\" + dt.getDate()).slice(-2);\n let m = (\"00\" + (dt.getMonth() + 1)).slice(-2);\n let y = dt.getFullYear();\n let hh = (\"00\" + dt.getHours()).slice(-2);\n let mm = (\"00\" + dt.getMinutes()).slice(-2);\n let ss = (\"00\" + dt.getSeconds()).slice(-2);\n\n let fmt = `${y}-${m}-${d}`;\n\n if (withtime) {\n fmt = `${y}-${m}-${d} ${hh}:${mm}:${ss}`;\n }\n if (asInputFormat) {\n fmt = `${y}-${m}-${d}T${hh}:${mm}:${ss}`;\n }\n\n //console.log(\"dt = \", dt, \"dat=\", dat, \"fmt = \",fmt);\n return fmt;\n}\n\nexport function date2UTC(d) {\n return new Date(d.getUTCFullYear(), d.getUTCMonth(), d.getUTCDate());\n}\n\nexport function addDays(dt, d) {\n return new Date(dt.getTime() + d * 24 * 3600 * 1000);\n}\n\nexport function asUTC(d) {\n return new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()));\n}\n\nexport function isBetween(fromutc, tmutc, toutc) {\n let t = tmutc.getTime();\n let f = fromutc.getTime();\n let to = toutc.getTime();\n\n return t >= f && t <= to;\n}\n\nexport function dateLimits(from, days) {\n let f = from;\n let t = addDays(from, days);\n return { from: f, to: t };\n}\n\nexport function formatDuration(sec_num) {\n var days = Math.floor(sec_num / 24 / 3600);\n var hours = Math.floor((sec_num - (days * 24 * 3600)) / 3600);\n var minutes = Math.floor((sec_num - (days * 24 * 3600) - (hours * 3600)) / 60);\n var seconds = sec_num - (days * 24 * 3600) - (hours * 3600) - (minutes * 60);\n\n if (hours < 10) { hours = \"0\" + hours; }\n if (minutes < 10) { minutes = \"0\" + minutes; }\n if (seconds < 10) { seconds = \"0\" + seconds; }\n let res = hours + ':' + minutes + ':' + seconds;\n if (days > 0) {\n return days + \"d \" + res;\n }\n return res;\n}\n\n// Helper functions to patch results from server\n\nfunction _deviceTS(d) {\n d.lastchanged = new Date(d.changed);\n return Promise.resolve(d);\n}\nfunction _devicesTS(devs) {\n return Promise.all(devs.map(_deviceTS));\n}\n\nfunction __rateTS(r) {\n r.validto = date2UTC(new Date(r.validto));\n r.validfrom = date2UTC(new Date(r.validfrom));\n return r;\n}\n\nfunction _rateTS(rates) {\n return Promise.all(rates.map(__rateTS));\n}\n\nfunction _serviceTS(s) {\n return Promise.resolve(__serviceTS(s));\n}\nfunction _servicesTS(srvs) {\n return Promise.all(srvs.map(_serviceTS));\n}\n\nfunction __serviceTS(s) {\n if (!s) return s;\n s.validto = date2UTC(new Date(s.validto));\n s.validfrom = date2UTC(new Date(s.validfrom));\n let rts = s.rates || [];\n for (let r of rts) {\n __rateTS(r);\n }\n return s;\n}\nfunction _bookingTS(b) {\n if (b.service) __serviceTS(b.service);\n if (b.rate) __rateTS(b.rate);\n b.to = date2UTC(new Date(b.to));\n b.from = date2UTC(new Date(b.from));\n return Promise.resolve(b);\n}\nfunction _bookingsTS(bks) {\n return Promise.all(bks.map(_bookingTS));\n}\n\nfunction _paymentTS(p) {\n p.payment.request = new Date(p.payment.request);\n p.payment.done = new Date(p.payment.done);\n return Promise.resolve(p);\n}\nfunction _paymentsTS(ps) {\n return Promise.all(ps.map(_paymentTS));\n}\nfunction _providerTS(s) {\n if (!s) return s;\n if (!s.openingtimes) return s;\n s.openingtimes.map(ot => {\n ot.from = date2UTC(new Date(ot.from));\n ot.to = date2UTC(new Date(ot.to));\n });\n return s;\n}\nfunction _providersTS(ps) {\n return Promise.all(ps.map(_providerTS));\n}\n\nfunction _couponTS(db) {\n db.coupon.from = new Date(db.coupon.from);\n db.coupon.to = new Date(db.coupon.to);\n return Promise.resolve(db);\n}\n\nexport function toFloat(value) {\n return parseFloat(value.replace(',', '.'), 10);\n}\n\nconst isnumber = /^\\d+(\\.\\d{0,2})?$/;\nexport function isPriceNumber(val) {\n return val.match(isnumber);\n}\n\nclass UserApi {\n me(tok) {\n return fetch('/users/api/v1/me', fetchInit(\"GET\", tok)).then(check);\n }\n newToken() {\n return fetch('/users/api/v1/me/newtoken', fetchInit(\"GET\", token)).then(check);\n }\n newTokenForUser(usr) {\n return fetch(`/users/api/v1/user/${usr.id}/newtoken`, fetchInit(\"GET\", token)).then(check);\n }\n organization(org) {\n return fetch(`/users/api/v1/org/${org.id}`, fetchInit(\"GET\", token)).then(check);\n }\n organizations() {\n return fetch('/users/api/v1/org', fetchInit(\"GET\", token)).then(check);\n }\n createOrganization(org) {\n return fetch('/users/api/v1/org', fetchInit(\"POST\", token, org)).then(check);\n }\n saveOrganization(org) {\n return fetch(`/users/api/v1/org/${org.id}`, fetchInit(\"PUT\", token, org)).then(check);\n }\n deleteOrganization(org) {\n return fetch(`/users/api/v1/org/${org.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n assignRates(org, rates) {\n return fetch(`/users/api/v1/org/${org.id}/assign`, fetchInit(\"POST\", token, rates)).then(check);\n }\n saveDocuments(org, docs) {\n return fetch(`/users/api/v1/org/${org.id}/documents`, fetchInit(\"POST\", token, docs)).then(check);\n }\n getDocuments(org) {\n return fetch(`/users/api/v1/org/${org.id}/documents`, fetchInit(\"GET\", token)).then(check);\n }\n createOffice(org, office) {\n return fetch(`/users/api/v1/org/${org.id}/office`, fetchInit(\"POST\", token, office)).then(check);\n }\n saveOffice(org, office) {\n return fetch(`/users/api/v1/org/${org.id}/office/${office.id}`, fetchInit(\"PUT\", token, office)).then(check);\n }\n office(org, officeid) {\n return fetch(`/users/api/v1/org/${org.id}/office/${officeid}`, fetchInit(\"GET\", token)).then(check);\n }\n offices(org) {\n return fetch(`/users/api/v1/org/${org.id}/office`, fetchInit(\"GET\", token)).then(check);\n }\n deleteOffice(org, office) {\n return fetch(`/users/api/v1/org/${org.id}/office/${office.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n all() {\n return fetch('/users/api/v1/user', fetchInit(\"GET\", token)).then(check);\n }\n user(usr) {\n return fetch(`/users/api/v1/user/${usr.id}`, fetchInit(\"GET\", token)).then(check);\n }\n saveUser(usr) {\n return fetch(`/users/api/v1/user/${usr.id}`, fetchInit(\"PUT\", token, usr)).then(check);\n }\n createUser(usr) {\n return fetch('/users/api/v1/user/', fetchInit(\"POST\", token, usr)).then(check);\n }\n deleteUser(usr) {\n return fetch(`/users/api/v1/user/${usr.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n saveAccounts(usr, accounts) {\n return fetch(`/users/api/v1/user/${usr.id}/accounts`, fetchInit(\"PUT\", token, accounts))\n .then(check);\n }\n\n rates() {\n return fetch('/users/api/v1/rate', fetchInit(\"GET\", token)).then(check);\n }\n rate(r) {\n return fetch(`/users/api/v1/rate/${r.id}`, fetchInit(\"GET\", token)).then(check);\n }\n deleteRate(r) {\n return fetch(`/users/api/v1/rate/${r.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n addRate(r) {\n return fetch(`/users/api/v1/rate/`, fetchInit(\"POST\", token, r)).then(check);\n }\n updateRate(r) {\n return fetch(`/users/api/v1/rate/`, fetchInit(\"PUT\", token, r)).then(check);\n }\n\n rateoptions() {\n return fetch('/users/api/v1/rateoption', fetchInit(\"GET\", token)).then(check);\n }\n\n contacts(org) {\n return fetch(`/users/api/v1/org/contact?oid=${org.id}`, fetchInit(\"GET\", token)).then(check);\n }\n contact(id) {\n return fetch(`/users/api/v1/org/contact/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n saveContact(contact) {\n return fetch(`/users/api/v1/org/contact`, fetchInit(\"PUT\", token, contact)).then(check);\n }\n createContact(contact) {\n return fetch(`/users/api/v1/org/contact`, fetchInit(\"POST\", token, contact)).then(check);\n }\n deleteContact(c) {\n return fetch(`/users/api/v1/org/contact/${c.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n\n activations(orgid, imei, skip, limit) {\n let s = \"limit=\" + limit + \"&skip=\" + skip\n return fetch(`/users/api/v1/org/${orgid}/outbound/activations?imei=${imei}&${s}`, fetchInit(\"GET\", token)).then(check);\n }\n\n appTokens(uid) {\n return fetch(`/users/api/v1/apptokens?userid=${uid}`, fetchInit(\"GET\", token)).then(check);\n }\n\n createAppToken(tok) {\n return fetch(`/users/api/v1/apptokens`, fetchInit(\"POST\", token, tok)).then(check);\n }\n\n revokeAppToken(tok) {\n return fetch(`/users/api/v1/apptokens/${tok.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n\n userlogs({ oid, level, type }) {\n const l = level || \"\";\n const t = type || \"\";\n return fetch(`/users/api/v1/logs/${oid}?level=${l}&type=${t}`, fetchInit(\"GET\", token)).then(check);\n }\n}\n\nconst User = new UserApi();\n\nclass ProtegearApi {\n backlog(from, until, imei) {\n let f = \"\";\n if (from) f = encodeURIComponent(from.toISOString());\n let t = \"\";\n if (until) t = encodeURIComponent(until.toISOString());\n return fetch(\"/protegear/api/v1/event?imei=\" + imei + \"&from=\" + f + \"&until=\" + t, fetchInit(\"GET\", token)).then(check);\n }\n\n deviceevents(imei, frm, until, skip, limit, oid) {\n let f = \"\";\n if (frm) f = encodeURIComponent(frm.toISOString());\n let t = \"\";\n if (until) t = encodeURIComponent(until.toISOString());\n if (!limit) limit = 0;\n if (!skip) skip = 0;\n if (!oid) oid = \"\";\n let pars = \"?from=\" + f + \"&until=\" + t + \"&limit=\" + limit + \"&skip=\" + skip + \"&oid=\" + oid;\n let uri = encodeURI(\"/protegear/api/v1/device/\" + imei + \"/events\");\n return fetch(uri + pars, fetchInit(\"GET\", token)).then(check);\n }\n\n events(frm, until) {\n let f = \"\";\n if (frm) f = encodeURIComponent(asUTC(frm).toISOString());\n let t = \"\";\n if (until) t = encodeURIComponent(asUTC(until).toISOString());\n let lastid = \"\";\n let num = 20;\n return fetch(`/protegear/api/v1/event?from=${f}&until=${t}`, fetchInit(\"GET\", token)).then(check);\n }\n positionAt(imei, ts, org) {\n let tss = encodeURIComponent(ts.toISOString())\n return fetch(`/protegear/api/v1/device/positionAt?id=${imei}&ts=${tss}&owner=${org}`, fetchInit(\"GET\", token)).then(check);\n }\n alldevices() {\n return fetch(`/protegear/api/v1/device`, fetchInit(\"GET\", token)).then(check).then(_devicesTS);\n }\n devices(org) {\n return fetch(`/protegear/api/v1/device?org=${org.id}`, fetchInit(\"GET\", token)).then(check).then(_devicesTS);\n }\n activateDevice(dev, st) {\n return fetch(`/protegear/api/v1/device/${dev.id}/activate/${st}`, fetchInit(\"POST\", token)).then(check).then(_deviceTS);\n }\n trips(org) {\n if (org)\n return fetch(`/tripshare/api/v1/trip?org=${org.id}`, fetchInit(\"GET\", token)).then(check);\n return fetch('/tripshare/api/v1/trip', fetchInit(\"GET\", token)).then(check);\n }\n tripshareVersionInfo() {\n return fetch(`/tripshare/api/v1/versionInfo`, fetchInit(\"GET\", \"\")).then(check)\n }\n alltrips(org) {\n return fetch('/tripshare/api/v1/trip/all', fetchInit(\"GET\", token)).then(check);\n }\n\n createTrip(trip) {\n return fetch('/tripshare/api/v1/trip', fetchInit(\"POST\", token, trip)).then(check);\n }\n\n throttleTrip({ trip, value }) {\n return fetch('/tripshare/api/v1/trip/' + trip.id + \"/throttle\", fetchInit(\"POST\", token, { delaySecs: value })).then(check);\n }\n\n\n loadTrip(trip) {\n return fetch(`/tripshare/api/v1/trip/${trip.id}`, fetchInit(\"GET\", token)).then(check);\n }\n\n deleteTrip(trip) {\n return fetch(`/tripshare/api/v1/trip/${trip.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n\n tripshareOrgSettings(settings) {\n return fetch(\"/tripshare/api/v1/settings/org\", fetchInit(\"POST\", token, settings)).then(check)\n }\n\n loadSettings(oid) {\n return fetch(`/protegear/api/v1/settings?oid=${oid}`, fetchInit(\"GET\", token)).then(check);\n }\n\n saveSettings(settings) {\n return fetch(`/protegear/api/v1/settings`, fetchInit(\"POST\", token, settings)).then(check);\n }\n\n createDevice(device) {\n return fetch(`/protegear/api/v1/device/${device.id}`, fetchInit(\"PUT\", token, device)).then(check).then(_deviceTS);\n }\n deleteDevice(device) {\n return fetch(`/protegear/api/v1/device/${device.id}`, fetchInit(\"DELETE\", token)).then(check).then(_deviceTS);\n }\n saveDevice(device) {\n return fetch(`/protegear/api/v1/device/${device.id}`, fetchInit(\"PUT\", token, device)).then(check).then(_deviceTS);\n }\n updateDevice(device) {\n let data = {\n name: device.name,\n comment: device.comment,\n rescueService: device.configuration.rescueService,\n gsm: device.configuration.gsm,\n satellite: device.configuration.satellite,\n status: device.status,\n rescueType: device.configuration.rescueType\n }\n return fetch(`/protegear/api/v1/device/${device.id}/update`, fetchInit(\"POST\", token, data)).then(check).then(_deviceTS);\n }\n loadDevice(device) {\n return fetch(`/protegear/api/v1/device/${device.id}`, fetchInit(\"GET\", token)).then(check).then(_deviceTS);\n }\n allDevices() {\n return fetch('/protegear/api/v1/device', fetchInit(\"GET\", token)).then(check).then(_devicesTS);\n }\n deviceTypes() {\n return fetch(`/protegear/api/v1/device/types`, fetchInit(\"GET\", token)).then(check);\n }\n\n createEventHandler(eh) {\n return fetch(`/protegear/api/v1/eventhandler`, fetchInit(\"POST\", token, eh)).then(check);\n }\n updateEventHandler(eh) {\n return fetch(`/protegear/api/v1/eventhandler`, fetchInit(\"PUT\", token, eh)).then(check);\n }\n getEventHandler(id) {\n return fetch(`/protegear/api/v1/eventhandler/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n getAllEventHandlers(owner) {\n return fetch(`/protegear/api/v1/eventhandler?owner=${owner.id}`, fetchInit(\"GET\", token)).then(check);\n }\n deleteEventHandler(id) {\n return fetch(`/protegear/api/v1/eventhandler/${id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n\n testMail(rcpts) {\n return fetch(`/protegear/api/v1/test/mail`, fetchInit(\"POST\", token, rcpts)).then(check);\n }\n testSMS(rcpts) {\n return fetch(`/protegear/api/v1/test/sms`, fetchInit(\"POST\", token, rcpts)).then(check);\n }\n testTelegram(chatid) {\n return fetch(`/protegear/api/v1/test/telegram`, fetchInit(\"POST\", token, chatid)).then(check);\n }\n testWebhook(hookparams) {\n return fetch(`/protegear/api/v1/test/webhook`, fetchInit(\"POST\", token, hookparams)).then(check);\n }\n testSlack(hookparams) {\n return fetch(`/protegear/api/v1/test/slack`, fetchInit(\"POST\", token, hookparams)).then(check);\n }\n sendHook(hookid, tok, from, end, batchlimit, simulate) {\n return fetch(`/protegear/api/v1/send/webhook/${hookid}`, fetchInit(\"POST\", token, { from, end, batchlimit, simulate })).then(check);\n }\n\n sendDeviceNotification(imei, n) {\n return fetch(`/protegear/api/v1/device/${imei}/sendNotification`, fetchInit(\"POST\", token, n)).then(check);\n }\n}\n\nconst Protegear = new ProtegearApi();\n\nclass TranslationApi {\n loadTranslation(appl) {\n return fetch(`/translation/api/v1/${appl}`, fetchInit(\"GET\", token)).then(check);\n }\n putTranslation(appl, data) {\n return fetch(`/translation/api/v1/${appl}/csv`, fetchInit(\"PUT\", token, data, \"text/plain\")).then(check);\n }\n}\n\n\nconst Translation = new TranslationApi();\n\n\nclass CoreApi {\n allChanges(human, from, until) {\n let f = \"\";\n if (from) f = encodeURIComponent(from.toISOString());\n let t = \"\";\n if (until) t = encodeURIComponent(until.toISOString());\n\n return fetch(`/core/api/v1/change?human=${human}&from=${f}&until=${t}`, fetchInit(\"GET\", token)).then(check);\n }\n appChanges(appid, from, until) {\n let f = \"\";\n if (from) f = encodeURIComponent(from.toISOString());\n let t = \"\";\n if (until) t = encodeURIComponent(until.toISOString());\n\n return fetch(`/core/api/v1/change/app/${appid}?from=${f}&until=${t}`, fetchInit(\"GET\", token)).then(check);\n }\n userChanges(usrid, from, until) {\n let f = \"\";\n if (from) f = encodeURIComponent(from.toISOString());\n let t = \"\";\n if (until) t = encodeURIComponent(until.toISOString());\n\n return fetch(`/core/api/v1/change/user/${usrid}?from=${f}&until=${t}`, fetchInit(\"GET\", token)).then(check);\n }\n entityChanges(eid, from, until) {\n let f = \"\";\n if (from) f = encodeURIComponent(from.toISOString());\n let t = \"\";\n if (until) t = encodeURIComponent(until.toISOString());\n\n return fetch(`/core/api/v1/change/entity/${eid}?from=${f}&until=${t}`, fetchInit(\"GET\", token)).then(check);\n }\n\n}\n\nconst Core = new CoreApi();\n\nclass CebraApi {\n isActive() {\n return true;\n }\n allProviders(orgid, onlyactive) {\n orgid = orgid || \"\";\n onlyactive = onlyactive ? true : false;\n return fetch(`/cebra/api/v1/provider?orgid=${orgid}&onlyactive=${onlyactive}`, fetchInit(\"GET\", token)).then(check);\n }\n provider(prov) {\n return fetch(`/cebra/api/v1/provider/${prov.id}`, fetchInit(\"GET\", token)).then(check).then(_providerTS);\n }\n providerAccess(prov) {\n return fetch(`/cebra/api/v1/provider/${prov.id}/access`, fetchInit(\"GET\", token)).then(check);\n }\n saveProviderAccess(prov, provs) {\n return fetch(`/cebra/api/v1/provider/access/${prov.id}`, fetchInit(\"PUT\", token, provs)).then(check);\n }\n allowOrg(prov, org) {\n return fetch(`/cebra/api/v1/provider/${prov.id}/orgaccess/${org.id}`, fetchInit(\"PUT\", token)).then(check);\n }\n denyOrg(prov, org) {\n return fetch(`/cebra/api/v1/provider/${prov.id}/orgaccess/${org.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n allowUser(prov, user) {\n return fetch(`/cebra/api/v1/provider/${prov.id}/useraccess/${user.id}`, fetchInit(\"PUT\", token)).then(check);\n }\n denyUser(prov, user) {\n return fetch(`/cebra/api/v1/provider/${prov.id}/useraccess/${user.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n createProvider(office) {\n return fetch(`/cebra/api/v1/provider/${office.id}`, fetchInit(\"POST\", token)).then(check);\n }\n loadProvider(prov) {\n return fetch(`/cebra/api/v1/provider/${prov.id}`, fetchInit(\"GET\", token)).then(check).then(_providerTS);\n }\n saveProvider(prov) {\n return fetch(`/cebra/api/v1/provider/${prov.id}`, fetchInit(\"PUT\", token, prov)).then(check);\n }\n deleteProvider(prov) {\n return fetch(`/cebra/api/v1/provider/${prov.id}`, fetchInit(\"DELETE\", token, prov)).then(check);\n }\n getPossiblePartners(provider, userdata) {\n if (userdata.me.manager || (provider.orgid == userdata.me.organization)) {\n return this.providerAccess(provider).then((acc) => {\n acc = acc.filter(o => o.partner).map(p => p.partner);\n acc.push(provider.organization);\n if (provider.organization.id != userdata.org.id)\n acc.push(userdata.org);\n let p = acc.sort((p1, p2) => p1.name.localeCompare(p2.name));\n return Promise.resolve(p);\n });\n } else {\n return Promise.resolve([userdata.org]);\n }\n }\n // partners\n allPartners(org) {\n return fetch(`/cebra/api/v1/partner/${org.id}`, fetchInit(\"GET\", token)).then(check);\n }\n updatePartners(org) {\n return fetch(`/cebra/api/v1/partner/`, fetchInit(\"PUT\", token, org)).then(check);\n }\n addPartnerOrg(org, partner) {\n return fetch(`/cebra/api/v1/partner/${org.id}/org/${partner.id}`, fetchInit(\"PUT\", token)).then(check);\n }\n removePartnerOrg(org, partner) {\n return fetch(`/cebra/api/v1/partner/${org.id}/org/${partner.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n addUserOrg(org, partner) {\n return fetch(`/cebra/api/v1/partner/${org.id}/user/${partner.id}`, fetchInit(\"PUT\", token)).then(check);\n }\n removeUserOrg(org, partner) {\n return fetch(`/cebra/api/v1/partner/${org.id}/user/${partner.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n allOrgProviderAccess(org) {\n return fetch(`/cebra/api/v1/partner/${org.id}/allProvidersAccess`, fetchInit(\"GET\", token)).then(check);\n }\n\n // categories\n allCategories() {\n return fetch(`/cebra/api/v1/category`, fetchInit(\"GET\", token)).then(check).then(cats => {\n return Promise.resolve(cats.sort((c1, c2) => c1.sortindex - c2.sortindex));\n });\n }\n allEnabledCategories() {\n return fetch(`/cebra/api/v1/category`, fetchInit(\"GET\", token)).then(check).then(cats => {\n let c = cats.filter(c => c.enabled).sort((c1, c2) => c1.sortindex - c2.sortindex)\n return Promise.resolve(c);\n });\n }\n updateCategories(cats) {\n return fetch(`/cebra/api/v1/category/update`, fetchInit(\"PUT\", token, cats)).then(check);\n }\n createCategory(cat) {\n return fetch(`/cebra/api/v1/category`, fetchInit(\"POST\", token, cat)).then(check);\n }\n deleteCategory(cat) {\n return fetch(`/cebra/api/v1/category/${cat.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n // rates\n allRates(sp) {\n return fetch(`/cebra/api/v1/rate/all/${sp.id}`, fetchInit(\"GET\", token)).then(check).then(_rateTS);\n }\n allOrgRates(org) {\n return fetch(`/cebra/api/v1/rate/org/${org.id}`, fetchInit(\"GET\", token)).then(check).then(_rateTS);\n }\n loadRate(rate) {\n return fetch(`/cebra/api/v1/rate/${rate.id}`, fetchInit(\"GET\", token)).then(check);\n }\n createRate(rate) {\n return fetch(`/cebra/api/v1/rate`, fetchInit(\"POST\", token, rate)).then(check);\n }\n deleteRate(rate) {\n return fetch(`/cebra/api/v1/rate/${rate.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n // services\n\n\n allOrgServices(org, name, from, to) {\n let f = from ? asUTC(from).toISOString() : \"\";\n let t = to ? asUTC(to).toISOString() : \"\";\n name = name || \"\";\n return fetch(`/cebra/api/v1/service/org/${org.id}?name=${name}&from=${f}&to=${t}`, fetchInit(\"GET\", token)).then(check).then(srvs => {\n return Promise.all(srvs.map(_serviceTS));\n });\n }\n allProviderServices(provider, from, to) {\n let f = from ? asUTC(from).toISOString() : \"\";\n let t = to ? asUTC(to).toISOString() : \"\";\n return fetch(`/cebra/api/v1/service/services/${provider.id}?from=${f}&to=${t}`, fetchInit(\"GET\", token)).then(check).then(srvs => {\n return Promise.all(srvs.map(_serviceTS));\n });\n }\n availableBetween(org, provid, from, to, ignorebookingid, partial) {\n let f = asUTC(from).toISOString();\n let t = asUTC(to).toISOString();\n let ignore = \"\";\n let part = \"false\";\n if (ignorebookingid) ignore = ignorebookingid;\n if (partial) part = \"true\";\n return fetch(`/cebra/api/v1/service/${org.id}/availableBetween?providerid=${provid}&from=${f}&to=${t}&ignorebookingid=${ignore}&partial=${part}`, fetchInit(\"GET\", token)).then(check).then(_servicesTS);\n }\n loadService(sv) {\n return fetch(`/cebra/api/v1/service/${sv.id}`, fetchInit(\"GET\", token)).then(check).then(_serviceTS);\n }\n loadServiceFull(sv) {\n return fetch(`/cebra/api/v1/service/${sv.id}/full`, fetchInit(\"GET\", token)).then(check).then(_servicesTS);\n }\n createService(sv) {\n return fetch(`/cebra/api/v1/service`, fetchInit(\"POST\", token, sv)).then(check).then(_serviceTS);\n }\n copyService(sid, spids) {\n let toids = spids.join(\"&toid=\");\n return fetch(`/cebra/api/v1/service/copy/${sid}?toid=${toids}`, fetchInit(\"POST\", token)).then(check).then(_serviceTS);\n }\n updateService(sv) {\n return fetch(`/cebra/api/v1/service`, fetchInit(\"PUT\", token, sv)).then(check).then(_serviceTS);\n }\n deleteService(sv) {\n return fetch(`/cebra/api/v1/service/${sv.id}`, fetchInit(\"DELETE\", token)).then(check).then(_serviceTS);\n }\n bookingsAfter(sv, from) {\n let f = asUTC(from).toISOString();\n return fetch(`/cebra/api/v1/service/${sv.id}/bookingsAfter?from=${f}`, fetchInit(\"GET\", token)).then(check).then(_bookingsTS);\n }\n\n // bookings\n createBooking(b) {\n return fetch(`/cebra/api/v1/booking`, fetchInit(\"POST\", token, b))\n .then(check)\n .then(_bookingTS);\n }\n updateBooking(b) {\n return fetch(`/cebra/api/v1/booking`, fetchInit(\"PUT\", token, b))\n .then(check)\n .then(_bookingTS);\n }\n loadBooking(bid) {\n return fetch(`/cebra/api/v1/booking/${bid}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_bookingTS);\n }\n cancelBooking(bid) {\n return fetch(`/cebra/api/v1/booking/${bid}/cancel`, fetchInit(\"POST\", token))\n .then(check)\n .then(_bookingTS);\n }\n allBookings(from, to, state, provider) {\n return fetch(`/cebra/api/v1/booking?from=${asUTC(from).toISOString()}&to=${asUTC(to).toISOString()}&status=${state}&providerid=${provider.id}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_bookingsTS);\n }\n changedBookings(from, to, provider) {\n return fetch(`/cebra/api/v1/booking/changes?from=${asUTC(from).toISOString()}&to=${asUTC(to).toISOString()}&providerid=${provider.id}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_bookingsTS);\n }\n arrivals(from, to, provider) {\n return fetch(`/cebra/api/v1/booking/${provider.id}/arrivals?from=${asUTC(from).toISOString()}&to=${asUTC(to).toISOString()}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_bookingsTS);\n }\n departures(from, to, provider) {\n return fetch(`/cebra/api/v1/booking/${provider.id}/departures?from=${asUTC(from).toISOString()}&to=${asUTC(to).toISOString()}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_bookingsTS);\n }\n findBookings(providerid, search, name, email, comment, externalid, onlyok, exact) {\n return fetch(`/cebra/api/v1/booking/find?providerid=${providerid}&search=${search}&comment=${comment}&name=${name}&email=${email}&externalid=${externalid}&onlyok=${onlyok}&exact=${exact}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_bookingsTS);\n }\n\n // payments\n findPayments(orgid, from, to, status, bookingstate) {\n return fetch(`/cebra/api/v1/payment/${orgid}/search?from=${asUTC(from).toISOString()}&to=${asUTC(to).toISOString()}&status=${status}&bookingstate=${bookingstate}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_paymentsTS);\n }\n // all payments\n allPayments(from, to, status, bookingstate) {\n return fetch(`/cebra/api/v1/payment?from=${asUTC(from).toISOString()}&to=${asUTC(to).toISOString()}&status=${status}&bookingstate=${bookingstate}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_paymentsTS);\n }\n\n\n // commissioning/billing\n loadCommission(id) {\n return fetch(`/cebra/api/v1/commissioning/${id}`, fetchInit(\"GET\", token)).then(check)\n }\n createCommission(id) {\n return fetch(`/cebra/api/v1/commissioning/${id}`, fetchInit(\"POST\", token)).then(check)\n }\n updateCommission(comm) {\n return fetch(`/cebra/api/v1/commissioning/${comm.id}`, fetchInit(\"PUT\", token, comm)).then(check)\n }\n htmlBilling(org, frm, to, providerid, categoryid, ownerid, cancelled, zeroprice, bounds, includeowner, includeprovider, includecategory) {\n let f = \"\";\n if (frm) f = encodeURIComponent(asUTC(frm).toISOString());\n let t = \"\";\n if (to) t = encodeURIComponent(asUTC(to).toISOString());\n let canc = \"\";\n if (cancelled) canc = \"true\";\n let zero = \"\";\n if (zeroprice) zero = \"true\";\n\n return fetch(`/cebra/api/v1/billing/${org.id}/html?from=${f}&to=${t}&cancelled=${canc}&zeropriced=${zero}&providerid=${providerid}&ownerid=${ownerid}&bounds=${bounds}&categoryid=${categoryid}&includeowner=${includeowner}&includeprovider=${includeprovider}&includecategory=${includecategory}`, fetchInit(\"GET\", token)).then(check)\n }\n\n // config\n loadConfiguration() {\n return fetch(`/cebra/api/v1/configuration`, fetchInit(\"GET\", token)).then(check)\n }\n saveConfiguration(cfg) {\n return fetch(`/cebra/api/v1/configuration`, fetchInit(\"PUT\", token, cfg)).then(check)\n }\n loadSettings(oid) {\n return fetch(`/cebra/api/v1/configuration/${oid}/settings`, fetchInit(\"GET\", token)).then(check)\n }\n saveSettings(oid, settings) {\n return fetch(`/cebra/api/v1/configuration/${oid}/settings`, fetchInit(\"PUT\", token, settings)).then(check)\n }\n loadAllCebraOrgs() {\n return fetch(`/cebra/api/v1/configuration/orgs`, fetchInit(\"GET\", token)).then(check)\n }\n\n versionInfo() {\n return fetch(`/cebra/api/v1/versionInfo`, fetchInit(\"GET\", \"\")).then(check)\n }\n\n // help\n\n feedback(subject, message) {\n let b = { subject, message };\n return fetch(`/cebra/api/v1/help/feedback`, fetchInit(\"POST\", token, b)).then(check)\n }\n\n // validation\n days(from, to) {\n var utc1 = Date.UTC(from.getFullYear(), from.getMonth(), from.getDate());\n var utc2 = Date.UTC(to.getFullYear(), to.getMonth(), to.getDate());\n\n return Math.round((utc2 - utc1) / (1000 * 60 * 60 * 24));\n }\n\n bookingRange(days) {\n return days >= 0 && days <= 28;\n }\n\n isServiceAvailable(srv, from, to) {\n let f = isBetween(srv.validfrom, from, srv.validto);\n if (to) f = f && isBetween(srv.validfrom, to, srv.validto);\n return f;\n }\n\n isRateAvailable(rate, from, to) {\n return isBetween(rate.validfrom, from, rate.validto); // && isBetween(rate.validfrom, to, rate.validto);\n }\n\n isProviderManager(provider, user) {\n return provider && (user.manager || (user.orgmanager && user.organization == provider.orgid));\n }\n\n isProviderUser(provider, user) {\n return provider && (user.manager || user.organization == provider.orgid);\n }\n isInOpening(provider, d) {\n // assume no opening times -> always open\n if (!provider.openingtimes || !provider.openingtimes.length) return true;\n\n for (var ot of provider.openingtimes) {\n if (isBetween(ot.from, d, ot.to)) {\n return true;\n }\n }\n return false;\n }\n}\n\nconst Cebra = new CebraApi();\n\n\nclass CebraDirectApi {\n // payment settings (only admin)\n loadSettings() {\n return fetch(`/cebradirect/api/v1/settings`, fetchInit(\"GET\", token)).then(check);\n }\n saveSettings(s) {\n return fetch(`/cebradirect/api/v1/settings`, fetchInit(\"PUT\", token, s)).then(check);\n }\n\n // directbooking\n loadDirectbooking(org) {\n return fetch(`/cebradirect/api/v1/${org.id}`, fetchInit(\"GET\", token)).then(check).then(_couponTS);\n }\n updateDirectbooking(org, db) {\n return fetch(`/cebradirect/api/v1/${org.id}`, fetchInit(\"PUT\", token, db)).then(check).then(_couponTS);\n }\n loadConfig(dbid) {\n return fetch(`/cebradirect/api/v1/${dbid}/config`, fetchInit(\"GET\", token)).then(check);\n }\n allCategories() {\n return fetch(`/cebradirect/api/v1/categories`, fetchInit(\"GET\", token)).then(check).then(cats => {\n return Promise.resolve(cats.sort((c1, c2) => c1.sortindex - c2.sortindex));\n });\n }\n loadDestinations(dbid) {\n return fetch(`/cebradirect/api/v1/${dbid}/destinations`, fetchInit(\"GET\", token))\n .then(check)\n .then(_providersTS);\n }\n loadServices(dbid, orgid, provid, from, to) {\n let f = asUTC(from).toISOString();\n let t = asUTC(to).toISOString();\n\n return fetch(`/cebradirect/api/v1/${dbid}/${orgid}/${provid}/availableServices?from=${f}&to=${t}`, fetchInit(\"GET\", token))\n .then(check)\n .then(_servicesTS);\n }\n\n checkCoupon(dbid, coupon) {\n return fetch(`/cebradirect/api/v1/${dbid}/coupon/${coupon}`, fetchInit(\"POST\", token)).then(check);\n }\n\n checkBank(dbid, iban, bic) {\n return fetch(`/cebradirect/api/v1/${dbid}/${bic}/${iban}/check`, fetchInit(\"GET\", token)).then(check);\n }\n\n putTransaction(dbid, tx) {\n return fetch(`/cebradirect/api/v1/${dbid}/transaction`, fetchInit(\"PUT\", token, tx)).then(check);\n }\n paygateResult(dbid, len, data) {\n return fetch(`/cebradirect/api/v1/${dbid}/paygateResult/${len}/${data}`, fetchInit(\"GET\", token)).then(check);\n }\n paypalExecute(dbid, payerid, paymentid) {\n return fetch(`/cebradirect/api/v1/${dbid}/paypalExecutePayment?payerid=${payerid}&paymentid=${paymentid}`, fetchInit(\"POST\", token)).then(check);\n }\n}\n\n\nconst CebraDirect = new CebraDirectApi();\n\nclass ManagerApi {\n // payment settings (only admin)\n configSettings() {\n return fetch(`/manager/api/v1/config`, fetchInit(\"GET\", token)).then(check);\n }\n saveConfigSettings(s) {\n return fetch(`/manager/api/v1/config`, fetchInit(\"PUT\", token, s)).then(check);\n }\n}\n\nclass SafeguardApi {\n addTour(tour) {\n return fetch(`/safeguard/api/v1/tour`, fetchInit(\"POST\", token, tour)).then(check);\n }\n delTour(id) {\n return fetch(`/safeguard/api/v1/tour/${id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n updateTour(tour) {\n return fetch(`/safeguard/api/v1/tour`, fetchInit(\"PUT\", token, tour)).then(check);\n }\n allTours(orgid, visibility, index, limit) {\n return fetch(`/safeguard/api/v1/tour?index=${index}&visibility=${visibility}&limit=${limit}&orgid=${orgid}`, fetchInit(\"GET\", token)).then(check);\n }\n tour(id) {\n return fetch(`/safeguard/api/v1/tour/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n addFleet(fleet) {\n return fetch(`/safeguard/api/v1/fleet`, fetchInit(\"POST\", token, fleet)).then(check);\n }\n updateFleet(fleet) {\n return fetch(`/safeguard/api/v1/fleet`, fetchInit(\"PUT\", token, fleet)).then(check);\n }\n allFleets(orgid, index, limit) {\n return fetch(`/safeguard/api/v1/fleet?index=${index}&limit=${limit}&orgid=${orgid}`, fetchInit(\"GET\", token)).then(check);\n }\n fleet(id) {\n return fetch(`/safeguard/api/v1/fleet/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n delFleet(id) {\n return fetch(`/safeguard/api/v1/fleet/${id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n availableDevices(orgid) {\n return fetch(`/safeguard/api/v1/fleet/availableDevices?orgid=${orgid}`, fetchInit(\"GET\", token)).then(check);\n }\n addTrace(tr) {\n return fetch(`/safeguard/api/v1/trace`, fetchInit(\"POST\", token, tr)).then(check);\n }\n delTrace(tr) {\n return fetch(`/safeguard/api/v1/trace/${tr.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n updateTrace(tr) {\n return fetch(`/safeguard/api/v1/trace`, fetchInit(\"PUT\", token, tr)).then(check);\n }\n updateTraceFenceData(trid, fence) {\n return fetch(`/safeguard/api/v1/trace/${trid}/fencedata`, fetchInit(\"PUT\", token, fence)).then(check);\n }\n allTraces(orgid, index, limit) {\n return fetch(`/safeguard/api/v1/trace?index=${index}&limit=${limit}&orgid=${orgid}`, fetchInit(\"GET\", token)).then(check);\n }\n trace(id) {\n return fetch(`/safeguard/api/v1/trace/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n tracestate(id) {\n return fetch(`/safeguard/api/v1/trace/${id}/state`, fetchInit(\"GET\", token)).then(check);\n }\n stateSummary(org) {\n return fetch(`/safeguard/api/v1/trace/${org.id}/statesummary`, fetchInit(\"GET\", token)).then(check);\n }\n send(id, msg, imei, channel, tos) {\n let dests = tos.join(\"&to=\");\n let mess = encodeURIComponent(msg);\n return fetch(`/safeguard/api/v1/trace/${id}/send?imei=${imei}&message=${mess}&channel=${channel}&to=${dests}`, fetchInit(\"GET\", token)).then(check);\n }\n addProfile(pr) {\n return fetch(`/safeguard/api/v1/profile`, fetchInit(\"POST\", token, pr)).then(check);\n }\n delProfile(id) {\n return fetch(`/safeguard/api/v1/profile/${id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n updateProfile(pr) {\n return fetch(`/safeguard/api/v1/profile`, fetchInit(\"PUT\", token, pr)).then(check);\n }\n allProfiles(orgid, index, limit) {\n return fetch(`/safeguard/api/v1/profile?index=${index}&limit=${limit}&orgid=${orgid}`, fetchInit(\"GET\", token)).then(check);\n }\n allProfileTemplates() {\n return fetch(`/safeguard/api/v1/profile?index=0&limit=20&orgid=DEFAULT&templates=true`, fetchInit(\"GET\", token)).then(check);\n }\n profile(id) {\n return fetch(`/safeguard/api/v1/profile/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n\n addEscalation(e) {\n return fetch(`/safeguard/api/v1/escalation`, fetchInit(\"POST\", token, e)).then(check);\n }\n delEscalation(id) {\n return fetch(`/safeguard/api/v1/escalation/${id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n addEscalationComment(e, comment, close, offset) {\n let d = { comment, close, offset }\n return fetch(`/safeguard/api/v1/escalation/${e.id}/comment`, fetchInit(\"POST\", token, d)).then(check);\n }\n allEscalations(orgid, index, limit) {\n return fetch(`/safeguard/api/v1/escalation?index=${index}&limit=${limit}&orgid=${orgid}`, fetchInit(\"GET\", token)).then(check);\n }\n escalation(id) {\n return fetch(`/safeguard/api/v1/escalation/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n\n addNotification(n) {\n return fetch(`/safeguard/api/v1/notification`, fetchInit(\"POST\", token, n)).then(check);\n }\n delNotification(id) {\n return fetch(`/safeguard/api/v1/notification/${id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n updateNotification(n) {\n return fetch(`/safeguard/api/v1/notification`, fetchInit(\"PUT\", token, n)).then(check);\n }\n allNotifications(orgid, index, limit) {\n return fetch(`/safeguard/api/v1/notification?index=${index}&limit=${limit}&orgid=${orgid}`, fetchInit(\"GET\", token)).then(check);\n }\n notification(id) {\n return fetch(`/safeguard/api/v1/notification/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n testMail(rcpts) {\n return fetch(`/protegear/api/v1/test/mail`, fetchInit(\"POST\", token, rcpts)).then(check);\n }\n testSMS(rcpts) {\n return fetch(`/protegear/api/v1/test/sms`, fetchInit(\"POST\", token, rcpts)).then(check);\n }\n testHook(n) {\n return fetch(`/safeguard/api/v1/notification/test/hook`, fetchInit(\"POST\", token, n)).then(check);\n }\n testSlack(n) {\n return fetch(`/safeguard/api/v1/notification/test/slack`, fetchInit(\"POST\", token, n)).then(check);\n }\n testTelegram(rcpts) {\n return fetch(`/protegear/api/v1/test/telegram`, fetchInit(\"POST\", token, rcpts)).then(check);\n }\n\n getSettings(oid) {\n return fetch(`/safeguard/api/v1/settings?oid=${oid}`, fetchInit(\"GET\", token)).then(check);\n }\n saveSettings(oid, parms) {\n let pars = [\"oid=\" + oid];\n if (\"information\" in parms)\n pars.push(\"information=\" + parms.information);\n if (\"allowdevicedeactivation\" in parms)\n pars.push(\"allowdevicedeactivation=\" + parms.allowdevicedeactivation);\n if (\"enablestatusemail\" in parms)\n pars.push(\"enablestatusemail=\" + parms.enablestatusemail);\n if (\"statusemailtrigger\" in parms)\n pars.push(\"statusemailtrigger=\" + parms.statusemailtrigger);\n if (parms.statusemailaddresses) {\n for (let em of parms.statusemailaddresses) {\n pars.push(\"statusemailaddresses=\" + encodeURIComponent(em))\n }\n }\n\n let ps = pars.join(\"&\");\n return fetch(`/safeguard/api/v1/settings`, fetchInit(\"POST\", token, ps, \"application/x-www-form-urlencoded\")).then(check);\n }\n\n devicecontacts(org) {\n return fetch(`/safeguard/api/v1/devicecontact?orgid=${org.id}`, fetchInit(\"GET\", token)).then(check);\n }\n devicecontact(id) {\n return fetch(`/safeguard/api/v1/devicecontact/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n saveDevicecontact(contact) {\n return fetch(`/safeguard/api/v1/devicecontact`, fetchInit(\"PUT\", token, contact)).then(check);\n }\n createDevicecontact(contact) {\n return fetch(`/safeguard/api/v1/devicecontact`, fetchInit(\"POST\", token, contact)).then(check);\n }\n deleteDevicecontact(c) {\n return fetch(`/safeguard/api/v1/devicecontact/${c.id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n\n availableRescueOrgs() {\n return fetch(`/safeguard/api/v1/rescueorgs`, fetchInit(\"GET\", token)).then(check);\n }\n\n // ### client side logic ...\n\n toBounds(pts) {\n return [pts.map(Safeguard.toLatLng)];\n }\n toLatLng(pt) {\n if (pt.lng) return pt;\n return { lat: pt.latitude, lng: pt.longitude };\n }\n\n shapeOptions(layertype, high) {\n let shapecolor = shapeColors[layertype];\n if (high)\n shapecolor = shapeColorsHigh[layertype];\n\n let shopts = {\n color: shapecolor,\n weight: 2,\n clickable: true,\n };\n return shopts;\n }\n\n createPathElement(layertype, tpname, ptype, element, high) {\n let shopts = this.shapeOptions(layertype, high);\n let rect = new ptype(this.toBounds(element.points), shopts);\n rect.info = {\n type: tpname,\n name: element.name,\n }\n return rect;\n }\n\n createCircleElement(layertype, tpname, ptype, element, high) {\n let shopts = this.shapeOptions(layertype, high);\n let p = Safeguard.toLatLng(element.center);\n shopts.radius = element.radiusmeter;\n let c = new ptype(p, shopts);\n c.info = {\n type: tpname,\n name: element.name\n }\n return c;\n }\n\n openEscalations(trace) {\n let esc = trace.output.escalations || [];\n return esc.filter(e => {\n let start = new Date(e.start);\n let end = new Date(e.end);\n return end.getTime() < start.getTime();\n });\n }\n}\n\nclass RescueApi {\n rescue(id) {\n return fetch(`/rescue/api/v1/rescue/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n createEscalation(traceid, imei, author) {\n let d = { author, traceid, imei }\n return fetch(\"/rescue/api/v1/rescue/escalation/\", fetchInit(\"POST\", token, d)).then(check);\n }\n\n escalation(id) {\n return fetch(`/rescue/api/v1/rescue/escalation/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n deviceevents(escid, imei, frm, until, skip, limit) {\n let f = \"\";\n if (frm) f = encodeURIComponent(frm.toISOString());\n let t = \"\";\n if (until) t = encodeURIComponent(until.toISOString());\n if (!limit) limit = 100;\n if (!skip) skip = 0;\n let pars = \"?from=\" + f + \"&until=\" + t + \"&limit=\" + limit + \"&skip=\" + skip\n return fetch(`/rescue/api/v1/rescue/${escid}/${imei}/events` + pars, fetchInit(\"GET\", token)).then(check);\n }\n escalationState(tid, imei) {\n return fetch(`/rescue/api/v1/rescue/${tid}/${imei}/escalationState`, fetchInit(\"GET\", token)).then(check);\n }\n comment(e, comment, author, close, offset) {\n let d = { comment, author, close, offset }\n return fetch(`/rescue/api/v1/rescue/${e.id}/comment`, fetchInit(\"POST\", token, d)).then(check);\n }\n demote(tid, imei, comment, author, offset) {\n let d = { comment, author, offset }\n return fetch(`/rescue/api/v1/rescue/${tid}/${imei}/demote`, fetchInit(\"POST\", token, d)).then(check);\n }\n}\n\nclass GlobalMailApi {\n targets(orgid) {\n let pars = \"?index=0&limit=-1\";\n if (orgid) {\n pars += \"&orgid=\" + orgid;\n }\n return fetch(`/globalmail/api/v1/target/` + pars, fetchInit(\"GET\", token)).then(check);\n }\n target(id) {\n return fetch(`/globalmail/api/v1/target/${id}`, fetchInit(\"GET\", token)).then(check);\n }\n addTarget(t) {\n return fetch(`/globalmail/api/v1/target/`, fetchInit(\"POST\", token, t)).then(check);\n }\n updateTarget(t) {\n return fetch(`/globalmail/api/v1/target/`, fetchInit(\"PUT\", token, t)).then(check);\n }\n delTarget(id) {\n return fetch(`/globalmail/api/v1/target/${id}`, fetchInit(\"DELETE\", token)).then(check);\n }\n config() {\n return fetch(`/globalmail/api/v1/base/config`, fetchInit(\"GET\", token)).then(check);\n }\n}\n\nconst Safeguard = new SafeguardApi()\nconst Manager = new ManagerApi();\nconst Rescue = new RescueApi();\nconst GlobalMail = new GlobalMailApi();\n\nexport { Cebra, CebraDirect, Core, GlobalMail, Manager, Protegear, Rescue, Safeguard, Translation, User };\n\nexport const DEPRECATE_OLD_APPS = true;\n\nexport let Applications = {\n console: {\n title: \"Protegear\",\n url: \"/console/\"\n },\n tripshare: {\n title: \"Tripshare\",\n url: \"/tripshare/\",\n deprecated: DEPRECATE_OLD_APPS,\n },\n manager: {\n title: \"Manager\",\n url: \"/manager/\",\n deprecated: DEPRECATE_OLD_APPS\n },\n cebra: {\n title: \"Cebra\",\n url: \"/cebra/\"\n },\n guardian: {\n title: \"SmartSafety\",\n url: \"/guardian/\",\n deprecated: DEPRECATE_OLD_APPS,\n },\n sports: {\n title: \"Sports\",\n url: \"/sports/\",\n deprecated: DEPRECATE_OLD_APPS,\n }\n};\n\nexport let CurrencySymbols = {\n USD: \"\\u0024\",\n EUR: \"\\u20AC\"\n}\n\nexport function hasRateOption(org, srv, name) {\n let rates = org.output.rates || [];\n for (let r of rates) {\n for (let o of r.options) {\n if (o.service == srv && o.name == name) {\n return true;\n }\n }\n }\n return false;\n}\nexport function canGlobalmail(org) {\n return hasRateOption(org, \"globalmail\", \"application\")\n}\nexport function hasAPIAccess(org) {\n return hasRateOption(org, \"protegear\", \"api\")\n}\nexport function canChangeLifetime(org) {\n return hasRateOption(org, \"protegear\", \"Event Lifetime Edit\")\n}\n\n\nclass PersistentGSTorage {\n getToken() {\n return localStorage.getItem(\"__gst_token__\");\n }\n setToken(token) {\n localStorage.setItem(\"__gst_token__\", token);\n }\n clearToken() {\n this.setToken(null);\n }\n getUser() {\n return JSON.parse(localStorage.getItem(\"__gst_user__\"));\n }\n setUser(usr) {\n localStorage.setItem(\"__gst_user__\", JSON.stringify(usr));\n }\n clearUser() {\n this.setUser(null);\n }\n setSelectedOrg(org) {\n localStorage.setItem(\"__gst_selected_org__\", JSON.stringify(org));\n }\n getSelectedOrg() {\n return JSON.parse(localStorage.getItem(\"__gst_selected_org__\"));\n }\n clearSelectedOrg() {\n this.setSelectedOrg(null);\n }\n getAppSettings(app) {\n const usersettings = localStorage.getItem(`__gst_${app}__`)\n return usersettings ? JSON.parse(usersettings) : {};\n }\n saveAppSettings(app, k, val) {\n const settings = this.getAppSettings(app);\n settings[k] = val;\n localStorage.setItem(`__gst_${app}__`, JSON.stringify(settings));\n }\n}\n\nexport function validPosition(p) {\n if (p.invalid) {\n return false;\n }\n if (p.gpsfix < 2) {\n return false;\n }\n if (p.lat == 0 && p.lng == 0) {\n return false\n }\n if (Math.abs(p.lat) > 90) {\n return false\n }\n if (Math.abs(p.lng) > 180) {\n return false\n }\n return true\n}\n\nexport let GSTorage = new PersistentGSTorage()\n\nexport function isFeaturesEnabled() {\n return navigator.languages.indexOf(\"zu\") > -1 && navigator.languages.indexOf(\"de-DE\") > -1;;\n}\n\nexport function isDevHost() {\n if (location.host.indexOf(\"localhost\") > -1) return true;\n if (location.host.indexOf(\"protegear.dev\") > -1) return true;\n if (location.hostname.endsWith(\"ts.net\")) return true;\n}","import SvgIcon from '@material-ui/core/SvgIcon';\nimport EMailIcon from '@material-ui/icons/Email';\nimport LocalHospitalIcon from '@material-ui/icons/LocalHospital';\nimport MessageIcon from '@material-ui/icons/Message';\nimport PublicIcon from '@material-ui/icons/Public';\nimport SMSIcon from '@material-ui/icons/Sms';\nimport React from 'react';\nimport alive1g from './img/alive.png';\nimport flymaster3g from './img/flymaster3g.png';\nimport inreach_gspmap66i from './img/inreach_gpsmap66i.png';\nimport inreach_gspmap67i from './img/inreach_gpsmap67i.png';\nimport inreach_gspmap86i from './img/inreach_gpsmap86i.png';\nimport inreach_messenger from './img/inreach_messenger.png';\nimport inreach_mini from './img/inreach_mini.png';\nimport inreach_mobile from './img/inreach_mobile.png';\nimport inreach_montana from './img/inreach_montana.png';\nimport inreach_se from './img/inreach_se.png';\nimport inreach_tread from './img/inreach_tread.png';\nimport inreach_xplorer from './img/inreach_xplorer.png';\nimport inreach_xplorerplus from './img/inreach_xplorerplus.png';\nimport meitrack from './img/meitrack.png';\nimport meitrackP88 from './img/meitrackP88.png';\nimport meitrackP99 from './img/meitrackP99.png';\nimport meitrackT355 from './img/meitrackT355.png';\nimport { default as sole1g, default as sole2g } from './img/sole.png';\nimport spot3 from './img/spot3.png';\nimport unknownImage from './img/unknown_device.png';\n\n// slack icon from here https://iconify.design/icon-sets/mdi/slack.html with some modifications\nconst slackIcon = ();\n\nexport const NotifyIcons = {\n email: {\n id: \"email\",\n icon: (),\n name: \"EMail\"\n },\n sms: {\n id: \"sms\",\n icon: (),\n name: \"SMS\"\n },\n delorme: {\n id: \"local_hospital\",\n icon: (),\n name: \"Rescue device\"\n },\n webhook: {\n id: \"public\",\n icon: (),\n name: \"Webhook\"\n },\n telegram: {\n id: \"message\",\n icon: (),\n name: \"Telegram\"\n },\n slack: {\n id: \"slack\",\n icon: ({slackIcon}),\n name: \"Slack\"\n }\n}\n\n\nexport const DevTypes = {\n INREACH_EXPLORER: inreach_xplorer,\n INREACH_EXPLORERPLUS: inreach_xplorerplus,\n INREACH_SE: inreach_se,\n INREACH_MOBILE: inreach_mobile,\n INREACH_MINI: inreach_mini,\n INREACH_MINI2: inreach_mini,\n INREACH_MONTANA: inreach_montana,\n INREACH_GPSMAP66i: inreach_gspmap66i,\n INREACH_GPSMAP67i: inreach_gspmap67i,\n INREACH_GPSMAP86i: inreach_gspmap86i,\n INREACH_TREAD: inreach_tread,\n INREACH_MESSENGER: inreach_messenger,\n MEITRACK: meitrack,\n MEITRACK_T355: meitrackT355,\n MEITRACK_P99: meitrackP99,\n MEITRACK_P88: meitrackP88,\n SPOT3: spot3,\n FLYMASTER3G: flymaster3g,\n ALIVE1G: alive1g,\n SOLE1G: sole1g,\n SOLE2G: sole2g,\n UNKNOWN: unknownImage,\n \"\": unknownImage,\n\n};\n","export function fetchInit(method, body) {\n let h = new Headers({\n \"Content-Type\": \"application/json\"\n });\n let res = {\n method: method,\n headers: h,\n cache: 'default'\n };\n if (body) {\n res.body = JSON.stringify(body);\n }\n return res;\n}\n\nexport function check(rsp) {\n if (rsp.ok) {\n return rsp.json();\n }\n if (rsp.status === 410) {// GONE\n return Promise.reject({ status: rsp.status, text: \"The trip is inactive\" });\n }\n return Promise.reject({ status: rsp.status, text: rsp.statusText });\n}\n\nexport function gettrip(tripid, nodevs, nostats) {\n return fetch(`/tripview/api/v1/trip/${tripid}?nodevs=${nodevs}&nostats=${nostats}`, fetchInit(\"GET\")).then(check);\n}\n\nexport function gpx(tripid, imei, from, until, name) {\n let f = from.toISOString();\n let t = until.toISOString();\n return fetch(`/tripview/api/v1/trip/${tripid}/gpx?imei=${imei}&from=${f}&until=${t}&name=${name}`, { method: \"GET\", cache: \"default\" }).then(rsp => rsp.text());\n}\n\nexport function getPositionAt(tripid, imei, tm) {\n let t = \"\";\n if (tm) t = encodeURIComponent(tm.toISOString());\n return fetch(`/tripview/api/v1/trip/${tripid}/${imei}/at?ts=${t}`, fetchInit(\"GET\")).then(rsp => {\n if (rsp.ok) return rsp.json();\n // do not reject, because caller always wants a value\n return Promise.resolve({});\n });\n}\n\nexport function getStat(tripid, imei) {\n return fetch(`/tripview/api/v1/trip/${tripid}/${imei}/stat`, fetchInit(\"GET\")).then(rsp => {\n if (rsp.ok) return rsp.json();\n // do not reject, because caller always wants a value\n return Promise.resolve({});\n });\n}\n\nlet eventFetcher = null;\n\nexport function getasyncevents(tripid, imeis, callback) {\n let devs = imeis.map(d => {\n return { imei: d, limit: 1000, skip: 0 }\n });\n stopAsyncEvents();\n eventFetcher = new EventFetcher(tripid, devs, callback);\n return eventFetcher.getevents();\n}\n\nexport function stopAsyncEvents() {\n if (eventFetcher) eventFetcher.stop();\n}\nclass EventFetcher {\n constructor(tripid, devices, callback) {\n this.tripid = tripid;\n this.devices = devices;\n this.callback = callback;\n this.running = true;\n }\n\n getevents() {\n if (!this.running) return;\n if (this.devices.length < 1) return;\n let dev = this.devices.shift();\n return fetch(`/tripview/api/v1/trip/${this.tripid}/${dev.imei}/events?limit=${dev.limit}&skip=${dev.skip}`, fetchInit(\"GET\"))\n .then(check)\n .then(evts => {\n this.callback(dev.imei, evts)\n if (evts.length >= dev.limit) {\n this.devices.push({ imei: dev.imei, limit: dev.limit, skip: dev.skip + evts.length });\n //return ; //Promise.resolve(true);\n }\n if (this.devices.length > 0)\n this.getevents();\n });\n }\n stop() {\n this.running = false;\n }\n}\n\nconst limit = 500\nclass EventFetchWorker {\n constructor(tripid) {\n this.tripid = tripid;\n this.queue = [];\n this.ignoreImeis = {};\n\n window.setInterval(() => {\n this._go();\n }, 1500);\n }\n\n removeJobs(imei) {\n this.queue = this.queue.filter(j => j.imei !== imei);\n this.ignoreImeis = { ...this.ignoreImeis, [imei]: true };\n }\n\n addJob(imei, cb, until) {\n delete this.ignoreImeis[imei];\n this._addJob(imei, cb, until);\n }\n\n _addJob(imei, cb, until) {\n if (this.ignoreImeis[imei]) return;\n const f = until ? new Date(until).toISOString() : \"\";\n this.queue.push({ imei, cb, until: f });\n }\n\n _go() {\n if (this.queue.length < 1) {\n return;\n }\n const job = this.queue.shift();\n const imei = job.imei;\n const cb = job.cb;\n const until = job.until\n let from = \"\";\n if (until) {\n //const oneDayMillis = 1000 * 3600 * 24\n //from = new Date(new Date(until).getTime() - oneDayMillis).toISOString();\n }\n\n fetch(`/tripview/api/v1/trip/${this.tripid}/${imei}/events?limit=${limit}&skip=0&from=${from}&until=${until}`, fetchInit(\"GET\"))\n .then(check)\n .then(evts => {\n if (this.ignoreImeis[imei]) return;\n cb(evts);\n if (evts.length >= limit) {\n const last = evts[evts.length - 1]\n this._addJob(imei, cb, last.sent);\n }\n });\n }\n}\n\nlet workerQueue = null;\n\nexport function initWorker(tripid) {\n workerQueue = new EventFetchWorker(tripid);\n}\n\nexport function addWorkerJob(imei, cb, until) {\n workerQueue.addJob(imei, cb, until);\n}\n\nexport function clearWorkerJobs(imei) {\n workerQueue.removeJobs(imei);\n}\n","import Iterator from 'collections/iterator';\nimport SortedSet from 'collections/sorted-set';\n//import * as SS from 'collections/sorted-set';\n\nimport * as api from './api/api';\n\n\nimport { validPosition } from 'gstjs2/backend';\n\nfunction eventEquals(e1, e2) {\n let s1 = new Date(e1.sent).getTime();\n let s2 = new Date(e2.sent).getTime();\n return s1 == s2;\n}\n\nfunction eventCompare(e1, e2) {\n let s1 = new Date(e1.sent).getTime();\n let s2 = new Date(e2.sent).getTime();\n return s1 - s2;\n}\n\nfunction promiseAllStepN(n, list) {\n let tail = list.splice(n)\n let head = list\n let resolved = []\n let processed = 0\n return new Promise(resolve => {\n head.forEach(x => {\n let res = x()\n resolved.push(res)\n res.then(y => {\n runNext()\n return y\n })\n })\n function runNext() {\n if (processed == tail.length) {\n resolve(Promise.all(resolved))\n } else {\n resolved.push(tail[processed]().then(x => {\n runNext()\n return x\n }))\n processed++\n }\n }\n })\n}\n\nlet allConcurrent = n => list => promiseAllStepN(n, list)\n\nexport class DeviceTrack {\n constructor(trip, dev, info, track, tail) {\n this.events = new SortedSet([], eventEquals, eventCompare);\n this.device = dev;\n this.trip = trip;\n this.statistic = null;\n this.info = info;\n this.visible = true;\n this.useTail = tail;\n this.setTracking(track);\n //this._fetchEvents()\n\n }\n\n getImei() {\n return this.device.id;\n }\n\n setVisible(v) {\n this.visible = v;\n }\n\n setInfo(i) {\n this.info = i;\n }\n\n getID() {\n return this.statistic.latestEvent.sent.getTime();\n }\n\n addStatistic(s) {\n this.statistic = s;\n if (s.latestEvent) {\n s.latestEvent.sent = new Date(s.latestEvent.sent);\n this.addEvent(s.latestEvent);\n }\n }\n\n addEvent(evt) {\n if (evt.position && validPosition(evt.position)) {\n if (!this.track) this.events.clear();\n this.events.push(evt);\n }\n }\n addEvents(evts) {\n for (let e of evts) {\n this.addEvent(e)\n }\n }\n\n getSlice(from, to) {\n let res = [];\n new Iterator(this.events.iterate({ sent: from }, { sent: to })).forEach(e => {\n res.push(e);\n })\n return res;\n\n }\n\n getAt(ts) {\n let res = this.events.findGreatestLessThanOrEqual({ sent: ts });\n if (res) return res.value;\n return null;\n }\n\n getNext(ts) {\n let res = this.events.findLeastGreaterThanOrEqual({ sent: ts });\n if (res) return res.value;\n return null;\n }\n\n getLeast() {\n let v = this.events.findLeast();\n return v ? v.value : null;\n }\n\n getGreatest() {\n let v = this.events.findGreatest();\n return v ? v.value : null;\n }\n\n hasPosition() {\n if (this.statistic) {\n let lp = this.statistic.latestPosition;\n return lp && lp.lat != 0 && lp.lng != 0;\n }\n return false\n }\n\n getCurrentPosition() {\n return this.statistic.latestPosition;\n }\n\n getCurrentPositionLatLng() {\n return new google.maps.LatLng(this.getCurrentPosition());\n }\n\n setTail(b) {\n this.useTail = b\n }\n\n getTail() {\n return this.useTail;\n }\n\n // __setTracking(t, cb) {\n // this.track = t;\n // if (t) {\n // //if (this.events.length < 1) {\n // allConcurrent(1)([() => this._fetchEvents(cb)]);\n // //}\n // }\n // }\n setTracking(t, cb) {\n this.track = t;\n if (t) {\n api.addWorkerJob(this.device.id, (evts) => {\n evts = evts.map(e => {\n e.event.sent = new Date(e.sent);\n return e.event;\n });\n this.addEvents(evts);\n if (cb) cb(this);\n })\n } else {\n api.clearWorkerJobs(this.device.id);\n }\n }\n\n // _fetchEvents(cb) {\n // let limit = 0;\n // let skip = 0;\n\n // let fetcher = () => {\n // return fetch(`/tripview/api/v1/trip/${this.trip.id}/${this.device.id}/events?limit=${limit}&skip=${skip}`, api.fetchInit(\"GET\"))\n // .then(api.check)\n // .then(evts => {\n // evts = evts.map(e => {\n // e.event.sent = new Date(e.sent);\n // return e.event;\n // });\n // this.addEvents(evts);\n // if (cb) cb(this);\n // /*if (evts.length >= limit) {\n // skip += evts.length;\n // fetcher()\n // }*/\n // });\n // }\n // fetcher = fetcher.bind(this)\n // return fetcher();\n // }\n\n}\n\nexport class DeviceTracks {\n constructor(trip, devs, statistics, info, tracking, tailing, cb) {\n this._info = info\n this._tracking = tracking;\n this._tailing = tailing\n this.tracks = {};\n this.update(trip, devs, statistics)\n }\n\n update(trip, devs, statistics) {\n this.trip = trip;\n this.latestTS = new Date();\n devs = devs || [];\n this.tracks = (devs || []).reduce((p, c) => {\n if (!p[c.id]) {\n if (c.id) {\n p[c.id] = new DeviceTrack(trip, c, this._info[c.id], this._tracking[c.id], this._tailing[c.id]);\n }\n }\n return p;\n }, this.tracks);\n const devmap = (devs || []).reduce((p, c) => ({ ...p, [c.id]: c }), {});\n for (const o of Object.keys(this.tracks)) {\n if (!devmap[o]) {\n delete (this.tracks, o)\n }\n }\n this._fill(statistics || {});\n }\n\n\n _fill(statistics) {\n for (let [imei, s] of Object.entries(statistics)) {\n if (imei) // this happens, when an empty statistic is in the map\n this.addStatistic(s)\n }\n }\n\n addStatistic(s) {\n let track = this?.tracks?.[s.imei];\n if (track) track.addStatistic(s);\n if (s.latestEvent) {\n let ts = new Date(s.latestEvent.sent);\n if (ts.getTime() > this.latestTS.getTime())\n this.latestTS = new Date(ts.getTime() + 1000); // the latest TS must be greater than the latest event\n }\n }\n\n getTrack(imei) {\n return this.tracks[imei];\n }\n\n getTracks() {\n return this.tracks;\n }\n\n getCurrentPosition(imei) {\n let track = this.tracks[imei];\n if (track && track.hasPosition()) {\n let pos = track.getCurrentPositionLatLng()\n return Promise.resolve(pos);\n }\n return Promise.reject(\"no track for imei found\");\n }\n\n allWithPositions() {\n let res = [];\n for (let [imei, track] of Object.entries(this.tracks)) {\n if (track.hasPosition() && track.visible) {\n res.push(track);\n }\n }\n return res;\n }\n\n getCenterAndBounds() {\n let bounds = new google.maps.LatLngBounds();\n let positions = [];\n\n for (let [imei, t] of Object.entries(this.tracks)) {\n if (t.hasPosition()) {\n let gp = t.getCurrentPositionLatLng();\n positions.push(gp);\n bounds.extend(gp);\n }\n }\n if (positions.length > 1) {\n return { bounds, center: bounds.getCenter(), zoom: 0 };\n }\n if (positions.length == 1) {\n return { bounds: null, center: positions[0], zoom: 11 };\n }\n return { bounds: null, center: null, zoom: 8 };\n }\n}\n","export class DisplayedTrack {\n constructor(maps, from, to, events, color, tail) {//path1, path2) {\n this.from = from;\n this.to = to;\n this.tail = tail\n this.trackline = new TrackLine(maps, events, color, tail);\n }\n\n clear() {\n this.trackline.clear();\n }\n\n before(points) {\n this.trackline.before(points);\n }\n\n after(pos) {\n this.trackline.after(pos);\n }\n\n refresh(points) {\n this.from = points[0].sent;\n this.to = points[points.length - 1].sent;\n this.trackline.refresh(points);\n }\n\n isAfter(ts) {\n return ts.getTime() < this.from.getTime();\n }\n}\n\nclass DoubleLine {\n constructor(pts, color) {\n // create a simple form of an identity value\n this._id = pts.reduce((v, ll) => {\n return v + ll.lat() + ll.lng()\n }, 0)\n\n this._points = pts;\n this._color = color;\n }\n\n show(map) {\n this.clear();\n this._backingLine = new google.maps.Polyline({\n path: this._points,\n geodesic: true,\n strokeColor: \"#FFFFFF\",\n strokeOpacity: 1.0,\n strokeWeight: 4,\n map: map,\n });\n this._frontLine = new google.maps.Polyline({\n path: this._points,\n geodesic: true,\n strokeColor: this._color,\n strokeOpacity: 0.8,\n strokeWeight: 2,\n map: map,\n })\n }\n\n clear() {\n if (this._backingLine) this._backingLine.setMap(null);\n if (this._frontLine) this._frontLine.setMap(null);\n }\n\n before(points) {\n const pt1 = this._backingLine.getPath();\n const pt2 = this._frontLine.getPath();\n points.map(p => {\n if (p.position) {\n pt1.insertAt(0, p.position);\n pt2.insertAt(0, p.position);\n }\n return p;\n });\n this._backingLine.setPath(pt1);\n this._frontLine.setPath(pt2);\n }\n\n after(points) {\n const pt1 = this._backingLine.getPath();\n const pt2 = this.pa_frontLineth2.getPath();\n points.map(p => {\n if (p.position) {\n pt1.push(new google.maps.LatLng(p.position));\n pt2.push(new google.maps.LatLng(p.position));\n }\n return p;\n });\n this._backingLine.setPath(pt1);\n this._frontLine.setPath(pt2);\n }\n}\n\nclass TrackLine {\n constructor(map, evts, color, tail) {\n this._maps = map;\n this.color = color;\n this._dlines = [];\n this._markers = {};\n this.tail = tail;\n\n this._createLines(map, evts)\n this._id = new Date().getTime();\n }\n\n createMarker(map, latLng, label, color, opac, begin) {\n const icon = document.createElement('div');\n icon.style.backgroundColor = color;\n icon.style.padding = '3px 3px 3px 3px';\n icon.style.borderRadius = '30%';\n icon.style.border = '1px solid #000'; // + (begin ? \"#fff\" : \"#000\");\n icon.innerHTML = begin ? '' : '';\n\n return new google.maps.marker.AdvancedMarkerElement({\n position: latLng,\n title: label,\n map: map,\n content: icon,\n });\n }\n\n _createLines(map, evts) {\n let tracks = [];\n let curtrk = [];\n let markers = {};\n\n const oldmarkers = { ...this._markers }\n for (let e of evts) {\n if (e.code == \"PONG\") continue;\n const key = e.sent.getTime();\n if (e.position && !e.position.invalid && e.position.gpsfix > 1) {\n let latLng = new google.maps.LatLng(e.position);\n\n if (curtrk.length == 0) {\n if (this.tail == 0) {\n const oldm = this._markers[key];\n if (oldm) {\n markers[key] = oldm\n } else {\n const lbl = `Start: ${e.sent.toLocaleString()}`\n markers[key] = this.createMarker(map, latLng, lbl, this.color, 0.5, true);\n }\n }\n }\n curtrk.push(latLng);\n if (e.code == \"STOP\" || e.code == \"POWER-OFF\") {\n tracks.push(curtrk);\n if (this.tail == 0) {\n const oldm = this._markers[key];\n if (oldm) {\n markers[key] = oldm\n } else {\n const lbl = `End: ${e.sent.toLocaleString()}`\n markers[key] = this.createMarker(map, latLng, lbl, this.color, 0.5, false);\n }\n }\n curtrk = [];\n }\n }\n }\n if (curtrk.length > 0) tracks.push(curtrk);\n this._markers = markers;\n // remove old markers\n Object.keys(oldmarkers).filter(m => markers[m] == null).forEach(m => oldmarkers[m].setMap(null));\n\n const newDlines = []\n // copy all current dlines so we can remove the ones we want to display again\n const oldlines = this._dlines.slice();\n for (let i = 0; i < tracks.length; i++) {\n const t = tracks[i]\n const dline = new DoubleLine(t, this.color);\n if (this._dlines.length > i) {\n const olddl = this._dlines[i];\n if (olddl._id == dline._id) {\n newDlines.push(olddl)\n // rmove this line from the oldlines\n oldlines[i] = null;\n continue\n }\n }\n dline.show(map);\n newDlines.push(dline);\n }\n this._dlines = newDlines;\n // all lines in oldlines are ... well old ones and should be removed from map\n oldlines.filter(l => l != null).forEach(l => l.clear())\n }\n\n clear() {\n this._dlines.forEach(dl => dl.clear());\n Object.values(this._markers).forEach(m => m.setMap(null));\n this._dlines = [];\n this._markers = {};\n }\n\n before(points) {\n this._dlines.forEach(dl => dl.before(points));\n }\n\n after(points) {\n this._dlines.forEach(dl => dl.after(points));\n }\n\n refresh(points) {\n //this.clear();\n this._createLines(this._maps, points);\n }\n\n}","import React, { useState } from 'react';\nimport { withStyles } from '@material-ui/styles';\nimport Button from '@material-ui/core/Button';\nimport Dialog from '@material-ui/core/Dialog';\nimport Input from '@material-ui/core/Input';\nimport DialogActions from '@material-ui/core/DialogActions';\nimport DialogContent from '@material-ui/core/DialogContent';\nimport DialogContentText from '@material-ui/core/DialogContentText';\nimport DialogTitle from '@material-ui/core/DialogTitle';\nimport {\n DatePicker,\n TimePicker,\n DateTimePicker,\n} from \"@material-ui/pickers\";\nimport InsertLink from '@material-ui/icons/InsertLink';\nimport IconButton from '@material-ui/core/IconButton';\n\nimport { formatLocalDate } from 'gstjs2/backend';\n\nconst styles = theme => {\n return {\n root: {\n zIndex: 2000,\n },\n urltext: {\n fontSize: \"0.8rem\",\n overflowX: \"hidden\"\n },\n infotext: {\n fontSize: \"0.75rem\"\n }\n }\n};\n\nclass ExportDialog extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n min: props.min,\n max: props.max\n }\n this.urltext = React.createRef();\n }\n\n componentDidUpdate(prevProps) {\n let oldmin = prevProps.min.getTime();\n let oldmax = prevProps.max.getTime();\n let newstate = {};\n if (oldmin != this.props.min.getTime()) newstate.min = this.props.min;\n if (oldmax != this.props.max.getTime()) newstate.max = this.props.max;\n if (newstate.length)\n this.setState({ ...newstate });\n }\n\n onClose() {\n let { onClose } = this.props;\n if (onClose) onClose()\n }\n onExport() {\n let { onExport } = this.props;\n if (onExport) onExport(this.state.min, this.state.max, this.props.device)\n }\n\n onChangeMin(dt) {\n this.setState({ min: dt.toDate() })\n }\n onChangeMax(dt) {\n this.setState({ max: dt.toDate() })\n }\n\n onCopyToClipboard(text) {\n this.urltext.current.select();\n this.urltext.current.focus();\n try {\n document.execCommand('copy');\n } catch (err) {\n console.error('unable to copy', err);\n }\n }\n\n render() {\n const { device, trip, open, classes } = this.props;\n const { min, max } = this.state;\n\n if (!open) return null;\n\n let devname = device.name || device.id;\n let devid = \"\";\n if (device.id) devid = device.id;\n\n let descr = `Export the tracking points from \"${devname}\" between the two dates.`\n let minstr = formatLocalDate(min, true, true);\n let maxstr = formatLocalDate(max, true, true);\n\n let fromu = encodeURIComponent(min.toISOString());\n let tou = encodeURIComponent(max.toISOString());\n\n let url = location.origin + \"/tripview/api/v1/trip/\" + trip.id + \"/gpx?from=\" + fromu + \"&until=\" + tou + \"&name=\" + encodeURIComponent(devname) + \"&imei=\" + devid;\n\n return (\n \n Export GPX\n \n \n {descr}\n \n this.onChangeMin(d)}\n value={min}\n ampm={false}\n clearable={false}\n disableFuture\n required\n format=\"DD.MM.YYYY HH:mm\"\n showTodayButton\n label=\"From\"\n />\n this.onChangeMax(d)}\n value={max}\n ampm={false}\n clearable={false}\n disableFuture\n required\n format=\"DD.MM.YYYY HH:mm\"\n showTodayButton\n label=\"To\"\n />\n
\n this.urltext.current.select()}\n inputRef={this.urltext}\n value={url}\n className={classes.urltext}\n style={{ flex: 1 }}\n inputProps={{\n 'aria-label': 'URL',\n readOnly: true,\n }}\n />\n this.onCopyToClipboard(url)} title=\"Copy Link to Clipboard\">\n \n \n
\n
\n You can use UMap \n or Google my Maps to\n create a new map. Import the given URL as GPX data format. Or click Export to\n download the GPX dataset and import the data in your preferred application.\n
\n
\n \n \n \n
\n )\n }\n}\n\nexport default withStyles(styles)(ExportDialog);\n","//\"use strict\";\n\nimport React, { useState } from 'react';\nimport { withStyles } from '@material-ui/styles';\nimport Grow from '@material-ui/core/Grow';\nimport Paper from '@material-ui/core/Paper';\nimport Popper from '@material-ui/core/Popper';\nimport MenuItem from '@material-ui/core/MenuItem';\nimport MenuList from '@material-ui/core/MenuList';\nimport ClickAwayListener from '@material-ui/core/ClickAwayListener';\n\nconst options = [\"all\", \"7 days\", \"48 hrs\", \"24 hrs\", \"12 hrs\"];\nconst noneOpt = \"-- none --\";\n\nconst styles = theme => {\n return {\n root: {\n zIndex: 2000,\n }\n\n }\n};\nclass TimePopper extends React.Component {\n\n onSelect(option) {\n const { onSelect } = this.props;\n if (onSelect) {\n switch (option) {\n case noneOpt: onSelect(-1); break;\n case \"all\": onSelect(0); break\n case \"7 days\": onSelect(24 * 7); break;\n case \"48 hrs\": onSelect(48); break;\n case \"24 hrs\": onSelect(24); break;\n case \"12 hrs\": onSelect(12); break;\n }\n }\n }\n\n onClose() {\n const { onClose } = this.props;\n if (onClose) onClose();\n }\n\n render() {\n const { anchor, classes, withNone } = this.props;\n let open = anchor != null;\n if (!open) return null;\n\n return (\n
\n \n {({ TransitionProps, placement }) => (\n \n \n this.onClose()}>\n \n {withNone && ( this.onSelect(noneOpt)}\n >\n {noneOpt}\n )}\n {options.map((option, index) => (\n this.onSelect(option)}\n >\n {option}\n \n ))}\n \n \n \n \n )}\n
\n )\n }\n}\n\nexport default withStyles(styles)(TimePopper);\n","import { formatDuration } from 'gstjs2/backend';\nimport React from 'react';\n\nconst K_WIDTH = 30;\nconst K_HEIGHT = 40;\nconst K_WIDTH2 = 75;\nconst K_HEIGHT2 = 30\n\nconst LARGEPIN_FROM = 0;\nconst LARGEPIN_UNTIL = 8;\nconst SMALLPIN_LIMIT = 2;\n\nconst INDEX_COLORS = [\n \"#4990E2\",\n \"#F44336\",\n \"#FF4081\",\n \"#7B1FA2\",\n \"#3F51B5\",\n \"#009688\",\n \"#8BC34A\",\n \"#FFEB3B\",\n \"#FFC107\",\n \"#F57C00\",\n \"#DCEDC8\",\n \"#B6B6B6\",\n \"#F0F4C3\",\n \"#00796B\",\n \"#E1BEE7\",\n \"#FF9800\",\n \"#ee9822\"\n]\nfunction getMapIcon(color) {\n let bdata = window.btoa(`\n \n \n \n \n \n \n `);\n\n return `url('data:image/svg+xml;base64,${bdata}')`;\n}\n\nfunction getLargeMapIcon(color) {\n let bdata = window.btoa(`\n \n \n \n \n \n \n \n \n \n `);\n return `url('data:image/svg+xml;base64,${bdata}')`;\n}\nexport function getColor(idx) {\n return INDEX_COLORS[idx % INDEX_COLORS.length];\n}\n\nexport function colorFromDevice(d) {\n let num = 0;\n for (let c in d.id) {\n num = num + d.id.charCodeAt(c)\n }\n return getColor(num);\n}\n\nconst deviceMarkerStyle = {\n width: K_WIDTH,\n height: K_HEIGHT,\n // left: -K_WIDTH / 2,\n // top: - K_HEIGHT,\n // marginTop: - K_HEIGHT,\n // marginLeft: - K_WIDTH / 2,\n\n backgroundImage: getMapIcon(\"#4990E2\"),\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n textAlign: 'center',\n color: '#3f51b5',\n padding: 0,\n fontSize: 13,\n fontWeight: 'bold',\n zIndex: null,\n //zIndex: 1000,\n //position: \"relative\"\n};\nconst deviceMarkerStyleLarge = {\n width: K_WIDTH2,\n height: K_HEIGHT2,\n // left: -K_WIDTH2 / 2,\n // top: - K_HEIGHT2,\n // marginTop: - K_HEIGHT2,\n // marginLeft: - K_WIDTH2 / 4,\n\n backgroundImage: getMapIcon(\"#4990E2\"),\n backgroundRepeat: 'no-repeat',\n backgroundSize: '75px 30px',\n textAlign: 'center',\n color: '#3f51b5',\n padding: 0,\n fontSize: 13,\n fontWeight: 'bold',\n zIndex: null,\n //zIndex: 1000,\n //position: \"relative\"\n};\n\nexport class DeviceMarker extends React.PureComponent {\n\n static defaultProps = {};\n\n constructor(props) {\n super(props);\n this.state = {\n deviceTrack: props.deviceTrack,\n };\n }\n\n showInfo() {\n const { onInfo, device } = this.props;\n const { deviceTrack } = this.state;\n\n deviceTrack.info = !deviceTrack.info;\n this.setState({ deviceTrack });\n if (onInfo) onInfo(device, deviceTrack.info)\n }\n\n toHHMMSS(sec_num) {\n return formatDuration(sec_num);\n }\n\n toTemperature(unit, temp) {\n if (unit === \"fahrenheit\") {\n let val = (temp * 1.8 + 32).toFixed(0);\n return `${val} °F`;\n }\n return `${temp} °C`;\n }\n\n toPressure(unit, p) {\n if (unit === \"inhg\") {\n let val = (p * 0.02953).toFixed(3);\n return `${val} inHG`;\n }\n return `${p} mbar`;\n }\n\n toDistance(unit, distmeter) {\n if (unit === \"km\") {\n var km = distmeter / 1000.0;\n km = km.toFixed(3);\n return `${km}km`;\n }\n if (unit === \"mile\") {\n var ml = distmeter / 1609.344;\n ml = ml.toFixed(3);\n return `${ml}miles`;\n }\n if (unit === \"sm\") {\n var sm = distmeter / 1852.0;\n sm = sm.toFixed(3);\n return `${sm}sm`;\n }\n return `${distmeter}m`;\n }\n\n toSpeed(unit, speedkmh, ignoreunit) {\n if (unit === \"mph\") {\n var mph = (speedkmh * 0.621371).toFixed(2);\n return ignoreunit ? `${mph}` : `${mph} mp/h`;\n }\n if (unit === \"kn\") {\n var kn = (speedkmh * 0.539957).toFixed(2);\n return ignoreunit ? `${kn}` : `${kn} kn`;\n }\n speedkmh = (speedkmh).toFixed(2); // runden\n return ignoreunit ? `${speedkmh}` : `${speedkmh} km/h`;\n }\n\n needsLargePin(text) {\n //return true; // always use large pin\n //return (text.length > LARGEPIN_FROM && text.length <= LARGEPIN_UNTIL);\n return text.length > SMALLPIN_LIMIT;\n }\n\n deviceLabel(outerlabel, device) {\n let result = outerlabel;\n if (device.name) {\n result = device.name;\n\n }\n if (result.length > LARGEPIN_UNTIL) {\n result = result.substring(0, LARGEPIN_UNTIL - 1) + \"..\";\n }\n\n return result;\n }\n\n onHover(t) {\n //this.setState({ hoverhint: t });\n }\n\n render() {\n let { device, index, trip, event, lat, lng, hoverhint } = this.props;\n const { deviceTrack } = this.state;\n let { statistic } = deviceTrack;\n const latestPosition = event.position;\n const lastSent = event.sent;\n const speedunit = trip.unitSpeed;\n const temperatureUnit = trip.unitTemperature;\n const pressureUnit = trip.unitAirpressure;\n const distanceunit = trip.unitDistance;\n const markerProps = trip.markerProps;\n\n let text = this.deviceLabel(this.props.text, device);\n\n if (statistic.latestEvent.sent.getTime() != event.sent.getTime()) {\n // if the displayed event is not the latest one, we do not display stats\n statistic = null;\n }\n let cssNames = \"map-marker-hint\";\n if (deviceTrack.info || hoverhint) cssNames = cssNames + \" map-marker-hint-show\";\n\n let lbl = {\n paddingRight: \"5px\",\n float: \"left\",\n textAlign: 'left',\n display: 'inline-block'\n }\n let val = {\n textAlign: 'left',\n whiteSpace: \"nowrap\",\n display: 'inline-block'\n }\n let wrapval = {\n textAlign: 'left',\n display: 'inline-block'\n }\n let row = {\n paddingTop: \"5px\"\n }\n\n //let idx = index % 10;\n let bcolor = colorFromDevice(device);\n\n let markerStyle = { ...deviceMarkerStyle };\n let labelStyle = { paddingTop: \"6px\", cursor: \"pointer\" };\n if (this.needsLargePin(text)) {\n markerStyle = { ...deviceMarkerStyleLarge };\n labelStyle = { paddingTop: \"2px\", cursor: \"pointer\" };\n markerStyle.backgroundImage = getLargeMapIcon(bcolor);\n }\n else {\n markerStyle.backgroundImage = getMapIcon(bcolor);\n }\n\n let showPosition = markerProps.positionInfo ? \"show\" : \"hide\";\n let showImei = markerProps.imeiInfo ? \"show\" : \"hide\"\n let showName = markerProps.devicename ? \"show\" : \"hide\"\n let showAltitude = markerProps.altitudeInfo ? \"show\" : \"hide\"\n let showAGL = markerProps.aglInfo ? \"show\" : \"hide\";\n let showSpeed = markerProps.speedInfo ? \"show\" : \"hide\";\n let showVSpeed = markerProps.vspeedInfo ? \"show\" : \"hide\";\n let showPos6D = markerProps.position6d ? \"show\" : \"hide\";\n let showTemperature = markerProps.temperature ? \"show\" : \"hide\";\n let showPressure = markerProps.airpressure ? \"show\" : \"hide\";\n\n\n let altValue = latestPosition ? latestPosition.alt : \"\";\n let aglValue = latestPosition ? Math.max(latestPosition.alt - latestPosition.height, 0) : \"\";\n let speedValue = latestPosition ? this.toSpeed(speedunit, latestPosition.speedkmh, false) : \"\";\n let vspeedValue = latestPosition ? latestPosition.verticalspeedms.toFixed(0) : \"\";\n let pos6dValue = latestPosition ? latestPosition.pos6d : \"\";\n let tempValue = event.environment ? this.toTemperature(temperatureUnit, event.environment.temperature) : \"\";\n let pressureValue = event.environment ? this.toPressure(pressureUnit, event.environment.airpressure) : \"\";\n\n let started = \"\";\n let distance = \"\";\n let elapsed = \"\";\n let altmaxmin = \"\";\n let aglmaxmin = \"\";\n let speedmaxmin = \"\";\n let vspeedmaxmin = \"\";\n let lastsignal = new Date(event.sent).toLocaleString();\n let lastmessage = \"\";\n let imei = device.imei || device.id;\n let lastmsgTS = null;\n\n if (statistic) {\n altValue = altValue\n altmaxmin = `${statistic.maxAltitudeMeter} / ${statistic.minAltitudeMeter}`\n aglmaxmin = `${statistic.maxAGLMeter} / ${statistic.minAGLMeter}`\n let tdiff = new Date(lastSent).getTime() - new Date(statistic.firstEvent.sent).getTime();\n if (tdiff) tdiff = parseInt(tdiff / 1000, 10);\n started = new Date(statistic.firstEvent.sent).toLocaleString();\n lastsignal = new Date(lastSent).toLocaleString();\n elapsed = this.toHHMMSS(tdiff);\n let avg = this.toSpeed(speedunit, statistic.averageSpeedKmh, true);\n let smin = this.toSpeed(speedunit, statistic.minSpeedKmh, true);\n let smax = this.toSpeed(speedunit, statistic.maxSpeedKmh, true);\n speedmaxmin = `${smin}/${smax}/${avg}`\n let vavg = statistic.averageVSpeedMs.toFixed(0);\n let vsmin = statistic.minVSpeedMs.toFixed(0);\n let vsmax = statistic.maxVSpeedMs.toFixed(0);\n vspeedmaxmin = `${vsmin}/${vsmax}/${vavg}`\n\n let dist = statistic.distanceMeter.toFixed(2);\n distance = this.toDistance(distanceunit, dist);\n lastmessage = statistic.lastMessage;\n if (lastmessage) {\n let dt = new Date(statistic.lastMessageTime);\n if (dt.getFullYear() > 2000) {\n let ds = dt.toLocaleString();\n lastmsgTS = ({ds}
);\n }\n }\n }\n let showTime = markerProps.timeInfo && started ? \"show\" : \"hide\"\n let showLastSignal = markerProps.lastSignal && lastsignal ? \"show\" : \"hide\";\n let showLastmessage = markerProps.lastMessage && lastmessage ? \"show\" : \"hide\";\n let showDistance = markerProps.distance && distance ? \"show\" : \"hide\";\n let showAltitudeMaxMin = markerProps.altitudeInfo && altmaxmin != \"\" ? \"show\" : \"hide\";\n let showAGLMaxMin = markerProps.aglInfo && aglmaxmin != \"\" ? \"show\" : \"hide\";\n let showSpeedMaxMin = markerProps.speedInfo && speedmaxmin != \"\" ? \"show\" : \"hide\";\n let showVSpeedMaxMin = markerProps.vspeedInfo && vspeedmaxmin != \"\" ? \"show\" : \"hide\";\n\n let st = { border: \"1px solid \" + bcolor } //, animation: \"fadein 0.8s\" };\n if (hoverhint) {\n st.zIndex = 20000;\n st.position = \"relative\"\n }\n let infoelement = (\n
\n
\n {device.name}\n
\n
\n {lastmsgTS}{lastmessage}\n
\n
\n IMEI:\n {imei}\n
\n
\n Started:\n {started}\n
\n
\n Latest Pos.:\n {lastsignal}\n
\n
\n Elapsed:\n {elapsed}\n
\n
\n Lat:\n {latestPosition.lat.toFixed(5)}\n
\n
\n Lng:\n {latestPosition.lng.toFixed(5)}\n
\n
\n Alt:\n {altValue}m\n
\n
\n Max/Min:\n {altmaxmin}\n
\n
\n AGL:\n {aglValue}m\n
\n
\n Max/Min:\n {aglmaxmin}\n
\n
\n Distance:\n {distance}\n
\n
\n Speed:\n {speedValue}\n
\n
\n Min/Max/Avg:\n {speedmaxmin}\n
\n
\n VSpeed:\n {vspeedValue} m/s\n
\n
\n Min/Max/Avg:\n {vspeedmaxmin}\n
\n
\n Pos6D:\n {pos6dValue}\n
\n
\n Temp.:\n {tempValue}\n
\n
\n Pressure:\n {pressureValue}\n
\n
\n );\n\n return (\n <>\n
\n
this.onHover(true)}\n onMouseLeave={() => this.onHover(false)}\n >{text}
\n {infoelement}\n
\n \n );\n }\n}\n","\"use strict\";\n\nimport Collapse from '@material-ui/core/Collapse';\nimport IconButton from '@material-ui/core/IconButton';\nimport Battery20 from '@material-ui/icons/Battery20';\nimport Battery30 from '@material-ui/icons/Battery30';\nimport Battery50 from '@material-ui/icons/Battery50';\nimport Battery60 from '@material-ui/icons/Battery60';\nimport Battery80 from '@material-ui/icons/Battery80';\nimport Battery90 from '@material-ui/icons/Battery90';\nimport BatteryCharging20Icon from '@material-ui/icons/BatteryCharging20';\nimport BatteryCharging30Icon from '@material-ui/icons/BatteryCharging30';\nimport BatteryCharging50Icon from '@material-ui/icons/BatteryCharging50';\nimport BatteryCharging60Icon from '@material-ui/icons/BatteryCharging60';\nimport BatteryCharging80Icon from '@material-ui/icons/BatteryCharging80';\nimport BatteryCharging90Icon from '@material-ui/icons/BatteryCharging90';\nimport BatteryChargingFullIcon from '@material-ui/icons/BatteryChargingFull';\nimport BatteryFull from '@material-ui/icons/BatteryFull';\nimport BatteryUnknown from '@material-ui/icons/BatteryUnknown';\nimport CenterFocusStrongIcon from '@material-ui/icons/CenterFocusStrong';\nimport CloudDownload from '@material-ui/icons/CloudDownload';\nimport GpsFixedIcon from '@material-ui/icons/GpsFixed';\nimport GpsOffIcon from '@material-ui/icons/GpsOff';\nimport InfoIcon from '@material-ui/icons/Info';\nimport InfoOutlinedIcon from '@material-ui/icons/InfoOutlined';\nimport KeyboardArrowDownIcon from '@material-ui/icons/KeyboardArrowDown';\nimport KeyboardArrowUpIcon from '@material-ui/icons/KeyboardArrowUp';\nimport LinearScaleIcon from '@material-ui/icons/LinearScale';\nimport PeopleIcon from '@material-ui/icons/People';\nimport PeopleOutlineIcon from '@material-ui/icons/PeopleOutline';\nimport TimelineIcon from '@material-ui/icons/Timeline';\nimport VisibilityIcon from '@material-ui/icons/Visibility';\nimport VisibilityOffIcon from '@material-ui/icons/VisibilityOff';\nimport WifiIcon from '@material-ui/icons/Wifi';\nimport { withStyles } from '@material-ui/styles';\nimport clsx from 'clsx';\nimport moment from 'moment';\nimport React from 'react';\nimport TimePopper from './TimePopper';\nimport { colorFromDevice } from './components/DeviceMarker';\n\n\n\nconst styles = theme => {\n return {\n root: {\n overflowY: \"auto\",\n height: \"100%\",\n padding: 2,\n },\n listTitle: {\n fontSize: \"0.9rem\",\n borderBottom: \"1px solid lightgrey\",\n padding: 5,\n display: \"flex\",\n alignItems: \"center\"\n },\n devicePanel: {\n border: \"1px solid grey\",\n borderRadius: 3,\n boxShadow: \"2px 2px 1px lightgrey\",\n backgroundColor: \"#e3eae8\",\n margin: 5,\n padding: 2,\n fontSize: \"0.8rem\",\n minWidth: 150,\n },\n devicePanelName: {\n display: \"flex\",\n lineHeight: \"20px\",\n cursor: \"pointer\"\n },\n devicePanelLastContact: {\n fontSize: \"0.75rem\",\n marginLeft: 5,\n marginRight: 5,\n },\n moreActionsButton: {\n cursor: \"pointer\"\n },\n moreActionsPanel: {\n padding: 3,\n },\n moreAction: {\n xmargin: 2,\n marginLeft: 5,\n marginRight: 5\n },\n moreActionButtonBar: {\n display: \"flex\",\n justifyContent: \"center\"\n },\n iconSmall: {\n fontSize: 20,\n },\n grow: {\n transition: \"all .2s ease -in -out\",\n transform: \"scale(1.2)\",\n marginTop: 25,\n marginBottom: 25,\n marginLeft: 25,\n marginRight: 25\n }\n }\n};\n\nconst lastContactDiffMins = 10;\nconst menuItemIconStyle = {\n verticalAlign: 'middle',\n};\n\nclass DeviceElement extends React.Component {\n constructor(props) {\n super(props);\n this.state = {\n moreMenu: props.info,\n info: props.info,\n timePopperAnchor: null\n }\n this._ref = React.createRef()\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.info != this.props.info) {\n this.setState({ moreMenu: this.props.info, info: this.props.info })\n }\n }\n\n moreMenu(evt, device) {\n this.setState({ moreMenu: !this.state.moreMenu })\n }\n\n onCenter(device) {\n const { onCenter } = this.props;\n if (onCenter) {\n onCenter(device);\n }\n }\n\n showIntoView(t) {\n const { classes } = this.props;\n let grow = classes.grow;\n\n if (this._ref) {\n let elem = this._ref.current;\n if (t) {\n elem.scrollIntoView({ block: 'start', behavior: 'smooth' });\n }\n }\n this.setState({ moreMenu: t, info: t })\n }\n\n onHideOthers(dev) {\n const { onHideOthers } = this.props;\n if (onHideOthers) onHideOthers(dev)\n }\n\n onShowOthers(dev) {\n const { onShowOthers } = this.props;\n if (onShowOthers) onShowOthers(dev)\n }\n\n onShowInfo(dev) {\n const { onShowInfoClicked } = this.props;\n if (onShowInfoClicked) onShowInfoClicked(dev)\n this.setState({ info: !this.state.info });\n }\n onShowTrack(dev) {\n const { onShowTrackClicked } = this.props;\n if (onShowTrackClicked) onShowTrackClicked(dev)\n }\n onShowTail(dev) {\n const { onShowTail } = this.props;\n if (onShowTail) onShowTail(dev)\n }\n\n onVisibleTrack(dev) {\n const { onVisibleTrack } = this.props;\n if (onVisibleTrack) onVisibleTrack(dev)\n }\n onDownloadGPX(dev) {\n const { onDownloadGPX } = this.props;\n if (onDownloadGPX) onDownloadGPX(dev)\n }\n onSelectTimeRange(hrs) {\n const { onSelectTimeRange, statistic, device } = this.props;\n\n this.setState({ timePopperAnchor: null })\n\n if (!onSelectTimeRange) return;\n\n let begin = null;\n let end = null;\n\n if (hrs == 0) {\n if (statistic && statistic.firstEvent) begin = new Date(statistic.firstEvent.sent);\n if (statistic && statistic.latestContact) end = new Date(statistic.latestContact.sent);\n } else {\n if (statistic && statistic.latestContact) {\n end = new Date(statistic.latestContact.sent);\n begin = new Date(end.getTime() - hrs * 3600 * 1000);\n }\n }\n onSelectTimeRange(device, begin, end);\n }\n\n onSelectTime(evt, dev) {\n this.setState({ timePopperAnchor: evt.target })\n }\n\n batteryIcon(stat) {\n if (!stat || !stat.latestContact || !stat.latestContact.battery)\n return [\"no data\", ()];\n\n let b = stat.latestContact.battery;\n let load = b.loadpercent + \"%\";\n const loading = stat.latestContact?.state?.charging == \"ON\";\n let loadCharging = b.loadpercent + \"% \" + \"(currently charging)\";\n if (b.loadpercent == 0 && !b.low) {\n // some devices only signal low or not low\n return [\"no data\", ()]\n }\n if (b.loadpercent < 20) {\n return loading ? [loadCharging, ()] : [load, ()]\n } if (b.loadpercent < 30) {\n return loading ? [loadCharging, ()] : [load, ()]\n } if (b.loadpercent < 50) {\n return loading ? [loadCharging, ()] : [load, ()]\n } if (b.loadpercent < 60) {\n return loading ? [loadCharging, ()] : [load, ()]\n } if (b.loadpercent < 80) {\n return loading ? [loadCharging, ()] : [load, ()]\n } if (b.loadpercent < 90) {\n return loading ? [loadCharging, ()] : [load, ()]\n }\n return loading ? [loadCharging, ()] : [load, ()]\n }\n\n durationWithPadding(duration) {\n if (duration.asDays() > 1) {\n let ds = parseInt(duration.asDays(), 10);\n return `>${ds} days`;\n } else {\n return [\n ('0' + duration.hours()).slice(-2),\n ('0' + duration.minutes()).slice(-2),\n ('0' + duration.seconds()).slice(-2),\n ].join(':')\n }\n }\n\n render() {\n const { device, classes, statistic, track, visible, tail } = this.props;\n const { info } = this.state;\n\n\n let name = device.name ? device.name : device.id;\n let lastcontact = \" -- no contact --\";\n let ttitle = `no contact since ${lastContactDiffMins} minutes`;\n let lines = 1;\n let icStyle = { ...menuItemIconStyle, color: \"red\" };\n let timepopup = false;\n if (statistic && statistic.latestContact) {\n let latest = new Date(statistic.latestContact.sent);\n if (latest.getFullYear() > 2000) {\n timepopup = true;\n lastcontact = latest.toLocaleString();\n let msecdiff = new Date() - latest;\n let mindiff = msecdiff / 1000 / 60;\n if (mindiff <= lastContactDiffMins) {\n icStyle.color = \"green\";\n ttitle = `contact in the last ${lastContactDiffMins} minutes`;\n }\n if (statistic.deltasec > 0) {\n let d = moment.duration(parseInt(statistic.deltasec.toFixed(0), 10), 'seconds');\n let delta = \"\\u0394\" + this.durationWithPadding(d)\n lastcontact = (
{lastcontact}{delta}
)\n }\n }\n }\n\n let moreActions = ();\n if (this.state.moreMenu) {\n moreActions = ();\n }\n let devcolor = colorFromDevice(device);\n let s = {\n backgroundImage: \"linear-gradient(to right,#e3eae8,\" + devcolor + \")\"\n }\n\n let className = classes.devicePanel;\n let infoIcon = ();\n let trackIcon = ();\n let visIcon = ();\n let tailIcon = ();\n\n let [batteryload, batteryIcon] = this.batteryIcon(statistic);\n\n if (!tail) {\n tailIcon = ();\n }\n\n if (!visible) {\n visIcon = ();\n }\n if (info) {\n className = clsx(classes.devicePanel, classes.grow)\n infoIcon = ()\n }\n if (track) {\n trackIcon = ()\n }\n\n return (\n
\n this.onSelectTimeRange(hrs)}\n onClose={() => this.setState({ timePopperAnchor: null })} />\n
this.moreMenu(evt, device)}>\n \n {batteryIcon}\n {name}\n \n {moreActions}\n
\n
{lastcontact}
\n \n
\n
\n this.onShowInfo(device)}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Info\"\n title=\"Info\">\n {infoIcon}\n \n this.onShowTrack(device)}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Track\"\n title=\"Track\">\n {trackIcon}\n \n this.onShowTail(device)}\n disabled={this.props.onShowTail == null}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Tail\"\n title=\"Tail\">\n {tailIcon}\n \n this.onVisibleTrack(device)}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Show/Hide\"\n title=\"Show/Hide\">\n {visIcon}\n \n this.onCenter(device)}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Center\"\n title=\"Center\">\n \n \n
\n
\n this.onShowOthers(device)}\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n aria-label=\"Show others\"\n title=\"Show others\">\n \n \n this.onHideOthers(device)}\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n aria-label=\"Hide others\"\n title=\"Hide others\">\n \n \n this.onSelectTime(evt, device)}\n variant=\"outlined\"\n size=\"small\"\n color=\"primary\"\n aria-label=\"Select time\"\n title=\"Select time\">\n \n \n this.onDownloadGPX(device)}\n variant=\"outlined\"\n disabled={!this.props.enableGPXExport}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Export GPX\"\n title=\"Export GPX\">\n \n \n
\n
\n
\n
\n )\n }\n}\n\n\nclass MenuDeviceList extends React.Component {\n constructor(props) {\n super(props)\n\n this.state = {\n }\n\n this._childrefs = {}\n }\n\n onCenter() {\n\n }\n\n onTrack() {\n\n }\n\n onShowOthers() {\n\n }\n\n onHideOthers() {\n\n }\n\n showDevice(d, t) {\n let ref = this._childrefs[d.id];\n if (ref)\n ref.showIntoView(t)\n }\n\n setChildRef(id, element) {\n this._childrefs[id] = element;\n }\n\n onShowInfoClicked(dev) {\n const { onShowInfoClicked } = this.props;\n if (onShowInfoClicked) onShowInfoClicked(dev);\n }\n onShowTrackClicked(dev) {\n const { onShowTrackClicked } = this.props;\n if (onShowTrackClicked) onShowTrackClicked(dev);\n }\n onShowTrackVisible(dev) {\n const { onShowTrackVisible } = this.props;\n if (onShowTrackVisible) onShowTrackVisible(dev);\n }\n\n onHideOthers(dev) {\n const { onHideOthers } = this.props;\n if (onHideOthers) onHideOthers(dev)\n }\n\n onShowOthers(dev) {\n const { onShowOthers } = this.props;\n if (onShowOthers) onShowOthers(dev)\n }\n\n onShowInfoAll() {\n const { onShowInfoAll } = this.props;\n if (onShowInfoAll) onShowInfoAll()\n }\n\n onShowTrackAll() {\n const { onShowTrackAll } = this.props;\n if (onShowTrackAll) onShowTrackAll()\n }\n\n onTailAll() {\n const { onTailAll } = this.props;\n if (onTailAll) onTailAll()\n }\n\n onShowTail(dev) {\n const { onShowTail } = this.props;\n if (onShowTail) onShowTail(dev)\n }\n\n onToggleTimeline(evt) {\n const { onToggleTimeline } = this.props;\n if (onToggleTimeline) onToggleTimeline(evt)\n }\n\n onDownloadGPX(evt) {\n const { onDownloadGPX } = this.props;\n if (onDownloadGPX) onDownloadGPX(evt)\n }\n\n onSelectTimeRange(dev, start, end) {\n const { onSelectTimeRange } = this.props;\n if (onSelectTimeRange) onSelectTimeRange(dev, start, end)\n }\n\n\n render() {\n const { classes, devices, tracks, onCenter } = this.props;\n const { anchorEl } = this.state;\n\n let orderedDevs = devices.sort((d1, d2) => {\n let n1 = d1.name ? d1.name : d1.id;\n let n2 = d2.name ? d2.name : d2.id;\n return n1.localeCompare(n2);\n });\n const open = Boolean(anchorEl);\n\n return (\n
\n
\n
Devices
\n
\n
\n this.onShowInfoAll()}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Toggle info all\"\n title=\"Toggle info all\">\n \n \n this.onShowTrackAll()}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Toggle track all\"\n title=\"Toggle track all\">\n \n \n this.onTailAll()}\n disabled={this.props.onTailAll == null}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Toggle tail all\"\n title=\"Toggle tail all\">\n \n \n this.onToggleTimeline(evt)}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Toggle timeline\"\n title=\"Toggle timeline\">\n \n \n this.onDownloadGPX({ name: this.props.trip.name })}\n variant=\"outlined\"\n disabled={!this.props.trip.enable_gpx_export}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Export GPX\"\n title=\"Export GPX\">\n \n \n
\n
\n {orderedDevs.map(d => {\n const track = tracks.getTrack(d.id);\n if (!track) return null\n const statistic = track.statistic;\n return (\n this.onShowInfoClicked(dev)}\n onShowTrackClicked={(dev) => this.onShowTrackClicked(dev)}\n onShowTail={this.props.onShowTail != null ? (dev) => this.onShowTail(dev) : null}\n onVisibleTrack={(dev) => this.onShowTrackVisible(dev)}\n onShowOthers={(dev) => this.onShowOthers(dev)}\n onHideOthers={(dev) => this.onHideOthers(dev)}\n onDownloadGPX={(dev) => this.onDownloadGPX(dev)}\n onSelectTimeRange={this.onSelectTimeRange.bind(this)}\n ref={(e) => this.setChildRef(d.id, e)}\n statistic={statistic}\n info={track.info}\n track={track.track}\n visible={track.visible}\n tail={track.useTail}\n onCenter={onCenter}\n enableGPXExport={this.props.trip.enable_gpx_export}\n device={d} />\n )\n })}\n
\n )\n }\n}\n\nexport default withStyles(styles)(MenuDeviceList);\n","\"use strict\";\n\nimport FormControl from '@material-ui/core/FormControl';\nimport IconButton from '@material-ui/core/IconButton';\nimport InputLabel from '@material-ui/core/InputLabel';\nimport NativeSelect from '@material-ui/core/NativeSelect';\nimport Slider from '@material-ui/core/Slider';\nimport TextField from '@material-ui/core/TextField';\nimport PauseIcon from '@material-ui/icons/Pause';\nimport PlayArrowIcon from '@material-ui/icons/PlayArrow';\nimport { withStyles } from '@material-ui/styles';\nimport React from 'react';\n\nimport { formatLocalDate } from 'gstjs2/backend';\n\nconst styles = theme => {\n\n return {\n\n root: {\n overflowY: \"hidden\",\n },\n sliderControl: {\n paddingTop: 25,\n paddingLeft: 50,\n paddingRight: 50\n },\n sliderLabels: {\n marginTop: -3,\n paddingLeft: 70,\n paddingRight: 70,\n display: \"flex\",\n justifyContent: \"space-between\",\n [theme.breakpoints.down('xs')]: {\n paddingLeft: 20,\n flexWrap: \"wrap\",\n justifyContent: \"flex-start\",\n flexDirection: \"column\",\n paddingTop: 0,\n paddingBottom: 10\n }\n },\n startlabel: {\n display: \"inline-block\",\n marginLeft: -25,\n paddingTop: -5,\n fontSize: \"0.8rem\",\n [theme.breakpoints.down('xs')]: {\n marginLeft: 0,\n paddingTop: 0,\n fontSize: \"0.7rem\",\n }\n },\n endlabel: {\n display: \"inline-block\",\n marginRight: -25,\n paddingTop: -5,\n fontSize: \"0.8rem\",\n [theme.breakpoints.down('xs')]: {\n marginLeft: 0,\n paddingTop: 0,\n marginTop: 5,\n fontSize: \"0.7rem\",\n }\n },\n valueLabel: {\n display: \"flex\",\n fontSize: \"0.8rem\",\n marginTop: 10,\n marginBottom: -20,\n justifyContent: \"center\"\n },\n slider: {\n width: \"100%\"\n },\n controlbar: {\n display: \"flex\",\n justifyContent: \"center\",\n fontSize: \"0.8rem\",\n marginTop: -40,\n paddingBottom: 10,\n alignContent: \"flex-end\",\n [theme.breakpoints.down('xs')]: {\n flexDirection: \"column\",\n //width: 120,\n marginTop: -100,\n marginLeft: 230,\n flexWrap: \"wrap\",\n justifyContent: \"right\",\n paddingBottom: 20\n }\n },\n IconBar: {\n display: \"flex\",\n justifyContent: \"space-evenly\"\n },\n controlIcon: {\n display: \"flex\",\n },\n datecontainer: {\n display: 'flex',\n flexWrap: 'wrap',\n fontSize: \"0.8rem\",\n [theme.breakpoints.down('xs')]: {\n fontSize: \"0.7rem\"\n }\n },\n datetextField: {\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n width: 200,\n [theme.breakpoints.down('xs')]: {\n marginLeft: 0,\n marginRight: 0,\n width: 180,\n }\n },\n datetext: {\n fontSize: \"0.8rem\"\n },\n\n speedtext: {\n fontSize: \"0.8rem\",\n textAlign: 'center',\n },\n\n formControl: {\n marginLeft: theme.spacing(1),\n marginRight: theme.spacing(1),\n fontSize: \"0.8rem\",\n },\n\n speedSelection: {\n width: \"5rem\"\n },\n\n playbw: {\n \"&:hover\": {\n color: \"red\"\n }\n }\n\n }\n};\n\n// update in millisecs when playback is started\nconst baseInc = 100;\n\nclass TimelineControl extends React.Component {\n constructor(props) {\n super(props);\n\n let { begin, end } = this._getDates(props);\n let now = props.initTS;\n\n this.state = {\n begin, end,\n value: now,\n playing: false,\n playback: false,\n inc: baseInc,\n sliderValue: now.getTime(),\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.minDate != this.props.minDate ||\n prevProps.maxDate != this.props.maxDate) {\n this.setState({ ...this._getDates(this.props) })\n }\n }\n\n _getDates(props) {\n let end = new Date(props.trip.end);\n let now = new Date();\n if (end.getFullYear() < 2000 || now.getTime() < end.getTime()) {\n end = now;\n }\n if (props.maxDate) end = props.maxDate;\n let begin = new Date(props.trip.start);\n if (props.minDate) begin = props.minDate;\n return { begin, end }\n }\n\n updateValue(value) {\n const { onSetTimestamp } = this.props;\n\n const { begin, end } = this.state;\n let t = new Date(value);\n if (value > end.getTime()) {\n t = end;\n this.onPause()\n }\n if (value < begin.getTime()) {\n t = begin;\n this.onPause()\n }\n this.setState({ value: t, sliderValue: value });\n if (onSetTimestamp) onSetTimestamp(t);\n }\n\n onValueChange(evt, value) {\n this.updateValue(value);\n }\n\n onPlay(evt, reverse) {\n evt.preventDefault()\n if (!this.timer) {\n this.timer = window.setInterval(() => {\n const { sliderValue, inc } = this.state;\n const delta = reverse ? -1 * inc : inc;\n this.updateValue(sliderValue + delta);\n }, baseInc);\n\n this.setState({ playing: true });\n }\n }\n\n onPause(evt) {\n evt.preventDefault()\n if (this.timer) window.clearTimeout(this.timer);\n this.timer = null;\n this.setState({ playing: false });\n }\n\n onChangeDate(fld, val) {\n if (!val) {\n if (fld == \"begin\") {\n val = new Date(this.props.trip.start)\n } else {\n let end = new Date(this.props.trip.end);\n let now = new Date();\n if (end.getFullYear() < 2000 || now.getTime() < end.getTime()) {\n end = now;\n }\n val = end;\n }\n }\n val = new Date(val)\n let value = this.state.value;\n if (fld == \"begin\") {\n if (this.state.value.getTime() < val.getTime()) {\n value = val;\n }\n } else if (fld == \"end\") {\n if (this.state.value.getTime() > val.getTime()) {\n value = val;\n }\n }\n\n this.setState({ [fld]: val, value, sliderValue: value.getTime() });\n }\n\n render() {\n const { classes, trip } = this.props;\n const { begin, end, value, sliderValue } = this.state;\n\n let beginStr = formatLocalDate(begin, true);\n let endStr = formatLocalDate(end, true);\n let valueStr = value.toLocaleString(undefined, {\n year: 'numeric',\n month: 'numeric',\n day: 'numeric',\n hour: 'numeric',\n minute: 'numeric',\n second: 'numeric',\n fractionalSecondDigits: 2\n });\n\n\n let min = begin.getTime();\n let max = end.getTime();\n\n let playIcon = (\n
\n this.onPlay(evt, false)}\n onTouchEnd={(evt) => this.onPlay(evt, false)}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Start\"\n title=\"Start\"\n disabled={this.state.playing ? true : false}>\n\n \n \n
\n )\n let pauseIcon = (\n
\n this.onPause(evt)}\n onTouchEnd={(evt) => this.onPause(evt)}\n size=\"small\"\n color=\"primary\"\n aria-label=\"Pause\"\n title=\"Pause\"\n disabled={this.state.playing ? false : true}>\n \n \n
\n )\n\n let playbackIcon = (\n
\n this.onPlay(evt, true)}\n onTouchEnd={(evt) => this.onPlay(evt, true)}\n >\n \n
)\n\n\n\n return (\n
\n
{valueStr}
\n
\n this.onValueChange(evt, v)}\n />\n
\n
\n
\n
\n { this.onChangeDate(\"begin\", evt.target.value) }}\n id=\"from\"\n label=\"Start\"\n type=\"datetime-local\"\n value={beginStr}\n className={classes.datetextField}\n InputProps={{\n classes: {\n input: classes.datetext\n }\n }}\n InputLabelProps={{\n shrink: true,\n }}\n />\n \n
\n
\n
\n { this.onChangeDate(\"end\", evt.target.value) }}\n id=\"to\"\n label=\"End\"\n type=\"datetime-local\"\n value={endStr}\n className={classes.datetextField}\n InputProps={{\n classes: {\n input: classes.datetext\n }\n }}\n InputLabelProps={{\n shrink: true\n }}\n />\n \n\n
\n
\n
\n
\n {playbackIcon}\n {pauseIcon}\n {playIcon}\n
\n \n Speed\n this.setState({ inc: baseInc * evt.target.value })}\n inputProps={{\n name: 'playbackspeedunit',\n id: 'playbackspeed',\n\n }}\n >\n \n \n \n \n \n \n\n \n \n
\n
\n )\n }\n}\n\n\n\nexport default withStyles(styles)(TimelineControl);\n","//\"use strict\";\n\nimport React, { useState } from 'react';\nimport { withStyles } from '@material-ui/styles';\nimport IconButton from '@material-ui/core/IconButton';\nimport MenuIcon from '@material-ui/icons/Menu';\nimport FormControlLabel from '@material-ui/core/FormControlLabel';\nimport Checkbox from '@material-ui/core/Checkbox';\n\nimport pg_logo_mini from 'img/pg_logo_mini_alpha.png';\n\nconst styles = theme => {\n return {\n root: {\n display: \"flex\",\n position: \"absolute\",\n border: \"1px solid white\",\n borderRadius: 20,\n backgroundColor: \"#e2e1e0\",\n zIndex: 1000,\n top: 5,\n left: 5,\n paddingRight: 10,\n lineHeight: \"25px\",\n flexDirection: \"row\",\n alignItems: \"center\",\n opacity: 0.8,\n },\n titleless: {\n position: \"absolute\",\n top: 5,\n left: 5,\n opacity: 0.8,\n zIndex: 1000,\n backgroundColor: \"#e2e1e0\",\n borderRadius: \"50%\",\n },\n menuElement: {\n display: \"inline-block\"\n },\n logo: {\n height: 35,\n marginTop: 3\n }\n }\n};\n\nclass TitleBar extends React.Component {\n menuClicked() {\n const { onMenuClick } = this.props;\n if (onMenuClick) onMenuClick()\n }\n\n render() {\n const { classes, visible } = this.props;\n if (!visible) return null;\n\n if (this.props.hidetitle) {\n return (\n
\n this.menuClicked()}>\n \n \n
\n )\n }\n return (\n
\n
\n this.menuClicked()}>\n \n \n
\n
{this.props.children}
\n
\n
\n )\n }\n}\n\nexport default withStyles(styles)(TitleBar);\n\n\n","//\"use strict\";\n\nimport { css } from '@emotion/react';\nimport { FormControl, InputLabel, Select } from '@material-ui/core';\nimport Drawer from '@material-ui/core/Drawer';\nimport IconButton from '@material-ui/core/IconButton';\nimport Snackbar from '@material-ui/core/Snackbar';\nimport ChevronLeftIcon from '@material-ui/icons/ChevronLeft';\nimport FacebookIcon from '@material-ui/icons/Facebook';\nimport LinkIcon from '@material-ui/icons/Link';\nimport MailIcon from '@material-ui/icons/Mail';\nimport TwitterIcon from '@material-ui/icons/Twitter';\nimport Alert from '@material-ui/lab/Alert';\nimport { withStyles } from '@material-ui/styles';\nimport clsx from 'clsx';\nimport { saveAs } from 'file-saver';\n//import GoogleMapReact from 'google-map-react';\nimport { getParameter } from 'gstjs2/backend';\n//import error_occured from 'img/error.svg';\nimport { AdvancedMarker, Map, useApiIsLoaded, useMap } from '@vis.gl/react-google-maps';\n//import { MapTypeControlStyle } from 'google.maps';\nimport pg_logo_mini from 'img/pg_logo_mini.png';\nimport error_occured from 'img/tracky_m.png';\nimport moment from 'moment';\nimport * as mqtt from 'mqtt/dist/mqtt.min';\nimport React from 'react';\nimport GridLoader from 'react-spinners/GridLoader';\nimport { DeviceTracks } from './DeviceTracks';\nimport { DisplayedTrack } from './DisplayedTrack';\nimport ExportDialog from './ExportDialog';\nimport MenuDeviceList from './MenuDeviceList';\nimport TimePopper from './TimePopper';\nimport TimelineControl from './TimelineControl';\nimport TitleBar from './TitleBar';\nimport * as api from './api/api';\nimport { colorFromDevice, DeviceMarker } from './components/DeviceMarker';\n\nconst drawerWidth = 270;\nconst timelineHeight = 120;\n\nconst spinner = css`\n display: block;\n margin: 100px auto;\n border-color: red;\n`;\n\nconst styles = theme => {\n return {\n root: {\n flexGrow: 1,\n height: '100svh',\n width: '100vw',\n position: \"absolute\",\n },\n menuButton: {\n marginRight: theme.spacing(2),\n },\n map: {\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n position: \"absolute\",\n },\n mapWithDrawer: {\n left: drawerWidth,\n width: \"calc(100% - \" + drawerWidth + \"px)\",\n },\n mapWithTimeline: {\n height: \"calc(100svh - \" + timelineHeight + \"px)\",\n [theme.breakpoints.down('xs')]: {\n height: \"calc(100svh - \" + timelineHeight + \"px - 80px)\",\n }\n },\n drawerTitle: {\n maxWidth: drawerWidth - 30,\n textOverflow: \"ellipsis\",\n overflow: \"hidden\",\n whiteSpace: \"nowrap\",\n fontSize: \"0.9rem\"\n },\n drawer: {\n width: drawerWidth,\n flexShrink: 0,\n },\n drawerPaper: {\n width: drawerWidth,\n },\n drawerHeader: {\n display: 'flex',\n padding: '0 8px',\n height: \"48px\",\n lineHeight: \"48px\",\n borderBottom: \"1px solid lightgrey\"\n },\n pgLogo: {\n height: 40,\n marginLeft: -10,\n paddingTop: 5,\n },\n errorIcon: {\n margin: \"0 auto\",\n paddingTop: 100,\n width: 300,\n\n },\n mapType: {\n margin: 4,\n },\n shareIconBox: {\n display: 'flex',\n maxWidth: drawerWidth - 5,\n paddingTop: 5,\n paddingBottom: 14,\n paddingRight: 6,\n height: 20,\n marginLeft: 4,\n marginTop: 10,\n borderBottom: \"1px solid lightgrey\",\n justifyContent: \"space-between\",\n alignItems: \"center\"\n },\n }\n};\n\nclass TripviewApp extends React.Component {\n\n constructor(props) {\n\n super(props);\n //this._forceupdate = false;\n this._menulist = React.createRef();\n\n let maptype = localStorage.getItem(\"google_maptypeid\");\n if (!maptype) maptype = \"satellite\";\n\n console.log(\"apiloaded\", props.apiLoaded);\n this.state = {\n center: {\n lat: 48.138612,\n lng: 11.575838\n },\n zoom: 0,\n tailSecs: 0,\n trip: null,\n drawer: true,\n deviceTracks: null,\n displayedTrack: {},\n infoAll: false,\n trackAll: false,\n tailAll: false,\n timeline: false,\n hidetitle: false,\n currentTS: new Date(),\n minDate: null,\n maxDate: null,\n devices: [],\n timePopperAnchor: null,\n exportDevice: null,\n exportGPX: false,\n errorOccured: false,\n errorText: \"\",\n maptype,\n open: false,\n hoverHint: {}\n };\n }\n\n getMinDate() {\n const { trip, minDate } = this.state;\n\n if (!trip) return new Date();\n if (minDate) return minDate;\n\n return new Date(trip.start);\n }\n\n getMaxDate() {\n const { trip } = this.state;\n\n let now = new Date();\n if (!trip || !trip.end || new Date(trip.end).getFullYear() < 2000) return now;\n\n let d = new Date(trip.end);\n if (now.getTime() < d.getTime()) return now;\n\n return d;\n }\n\n connectMqtt(trip) {\n let hn = global.location.hostname;\n // hack, so we support \"my.protegear.net\" also ...\n if (hn.endsWith(\"protegear.net\")) {\n hn = \"protegear.io\"\n }\n const url = global.location.hostname == \"localhost\" ? \"ws://localhost:1882\" : `wss://mqtt.${hn}`\n\n const client = mqtt.connect(url)\n const tripTopic = `public/trip/${trip.id}`\n const statsTopic = `public/trip/${trip.id}/stat`\n\n client.on(\"connect\", function () {\n let topics = [tripTopic, statsTopic + \"/#\"];\n client.subscribe(topics, function (err) {\n //console.error(\"subscribe error\", err)\n });\n });\n client.on(\"message\", (topic, message) => {\n // message is Buffer\n const data = message.toString() ? JSON.parse(message.toString()) : null;\n console.log(topic, data);\n if (topic == tripTopic) {\n api.gettrip(data.id, false, true).then(t => {\n let { trip, devices } = t;\n console.info(\"got new tripdata\", t)\n this.setState({ trip, devices: devices || [] });\n // // fetch stats in a separate call\n // api.gettrip(data.id, true, false).then(t => {\n // let { statistics } = t;\n // if (!statistics) statistics = {};\n // if (this.state.deviceTracks)\n // this.state.deviceTracks.update(trip, devices, statistics)\n // this.setState({\n // statistics\n // })\n // this.centerAndZoomMap(this.state.deviceTracks)\n // })\n })\n return\n }\n if (topic.startsWith(statsTopic)) {\n if (this.state.deviceTracks)\n this.state.deviceTracks.addStatistic(data);\n //this.liveUpdateStats([data]);\n }\n })\n }\n\n connectPushSockets(trip) {\n this.connectMqtt(trip)\n }\n\n liveUpdateStats(stats) {\n const { deviceTracks } = this.state;\n for (let s of stats) {\n deviceTracks.addStatistic(s);\n }\n window.requestAnimationFrame(this.refresh.bind(this));\n //this._forceupdate = true;\n }\n\n getDeviceStartupParameter(pname) {\n let all = 0;\n let devs = {};\n\n let info = getParameter(pname);\n\n if (!info) return [all, devs];\n\n if (info == \"all\") all = 1;\n else if (info == \"\") all = 0;\n else {\n all = 2;\n devs = info.split(\",\").reduce((p, c) => {\n p[c] = true;\n return p;\n }, {})\n }\n\n return [all, devs];\n }\n\n deviceList(all, current, devices) {\n if (all == 0) return current;\n if (all == 2) return current;\n\n return devices.reduce((p, d) => {\n p[d.id] = true\n return p;\n }, {})\n }\n\n componentDidUpdate(prevProps) {\n if (!prevProps.map && this.props.map) {\n this.map = this.props.map;\n this.centerAndZoomMap();\n }\n }\n\n componentDidCatch(err, info) {\n console.log(\"error: \", err, \", info: \", info)\n }\n\n _asTS(ts, defval) {\n try {\n if (ts) ts = new Date(ts);\n else ts = defval;\n } catch (e) {\n ts = defval\n }\n return ts;\n }\n\n componentDidMount() {\n let tid = getParameter(\"trip\");\n\n api.initWorker(tid)\n\n let [trackAll, trackDevices] = this.getDeviceStartupParameter(\"track\");\n let [infoAll, infoDevices] = this.getDeviceStartupParameter(\"info\");\n let [tailAll, tailDevices] = this.getDeviceStartupParameter(\"tail\");\n let zoom = getParameter(\"zoom\") || this.state.zoom;\n let tailSecs = getParameter(\"tailSecs\");\n let showdrawer = parseInt(getParameter(\"devices\"), 10) == 1;\n let timeline = parseInt(getParameter(\"timeline\"), 10) == 1;\n let hidetitle = parseInt(getParameter(\"hidetitle\"), 10) == 1;\n let ts = this._asTS(getParameter(\"ts\"), new Date());\n let mints = this._asTS(getParameter(\"mints\"), null);\n let maxts = this._asTS(getParameter(\"maxts\"), null);\n let since = getParameter(\"since\");\n const repainter = this.refresh.bind(this);\n\n if (since) {\n let d = moment.duration(since);\n if (!moment.isDuration(d)) {\n console.error(\"invalid duration for since: \", since);\n } else {\n console.info(\"using duration for min/max:\", d);\n mints = moment().subtract(d).toDate();\n }\n }\n\n console.log(\"mints: \", mints, \", maxts: \", maxts);\n\n if (zoom) zoom = parseInt(zoom, 10)\n if (tailSecs) tailSecs = parseInt(tailSecs)\n\n api.gettrip(tid, false, false).then(t => {\n let { trip, devices, statistics } = t;\n console.log(\"got trip, connect push socket\", trip)\n this.connectPushSockets(trip);\n\n if (!devices) devices = [];\n if (!statistics) statistics = {};\n infoDevices = this.deviceList(infoAll, infoDevices, devices);\n trackDevices = this.deviceList(trackAll, trackDevices, devices);\n tailDevices = this.deviceList(tailAll, tailDevices, devices);\n\n let deviceTracks = new DeviceTracks(trip, devices, statistics, infoDevices, trackDevices, tailDevices, dt => repainter());\n\n this.setState({\n trip,\n devices,\n statistics,\n zoom,\n tailSecs,\n deviceTracks,\n infoAll: infoAll > 0,\n trackAll: trackAll > 0,\n tailAll: tailDevices > 0,\n drawer: showdrawer,\n timeline,\n hidetitle,\n currentTS: ts,\n minDate: mints,\n maxDate: maxts\n })\n\n // force a refresh so the tracking is shown\n window.requestAnimationFrame(this.refresh.bind(this));\n window.setInterval(() => {\n // every minute a refresh, so we update the state colors for devices from green to red\n //this._forceupdate = true;\n this.refresh();\n }, 1000);//1000 * 60);\n }).catch(e => {\n this.setState({ errorOccured: true, errorText: e.text ? e.text : \"\" });\n console.log(\"oops: \", e)\n })\n }\n\n refresh() {\n if (!this.map) {\n window.requestAnimationFrame(this.refresh.bind(this));\n return; // only if the map is initialized\n }\n\n const { deviceTracks, displayedTrack, timeline, currentTS, trip } = this.state;\n let ts = deviceTracks.latestTS;\n let now = new Date()\n let tailSeconds = trip.tailSecs;\n if (this.state.tailSecs != null) {\n tailSeconds = this.state.tailSecs;\n }\n if (timeline) {\n ts = currentTS;\n now = ts\n }\n\n const tracks = deviceTracks.getTracks();\n for (let [imei, track] of Object.entries(tracks)) {\n let dt = displayedTrack[imei];\n if (!track.track) {\n if (dt) {\n dt.clear();\n delete (displayedTrack[imei])\n }\n continue;\n }\n let mind = this.getMinDate();\n if (tailSeconds > 0 && track.getTail()) {\n mind = new Date(now.getTime() - tailSeconds * 1000);\n }\n let points = track.getSlice(mind, ts);\n // it seems, that the slice method returns an array, if it finds nothing\n // --> we need a better implementation for the sorted set\n let first = track.getNext(mind);\n\n if (!first || !points.length) {\n if (dt) {\n dt.clear();\n delete (displayedTrack[imei]);\n }\n continue;\n };\n\n if (!dt) {\n dt = new DisplayedTrack(this.map, mind, currentTS, points, colorFromDevice({ id: imei }), tailSeconds);\n displayedTrack[imei] = dt;\n continue\n }\n dt.refresh(points);\n }\n //if (this._forceupdate || ts.getTime() != currentTS.getTime()) {\n //this._forceupdate = false;\n this.setState({ currentTS: ts });\n //window.requestAnimationFrame(this.refresh.bind(this));\n //this.forceUpdate()\n //}\n }\n\n centerAndZoomMap(dtracks) {\n console.log(\"center and zoom:\", dtracks)\n const { deviceTracks } = this.state;\n const devtracks = dtracks || deviceTracks;\n let calledZoom = this.state.zoom;\n\n let { bounds, center, zoom } = devtracks.getCenterAndBounds();\n\n if (!center) {\n // we have nothing ....\n return\n }\n const map = this.map;\n if (!map) {\n window.requestAnimationFrame(this.centerAndZoomMap.bind(this, devtracks));\n return;\n }\n if (bounds)\n map.fitBounds(bounds, 50);\n map.panTo(center);\n if (zoom == 0 || calledZoom != 0) zoom = calledZoom;\n if (zoom)\n map.setOptions({ zoom });\n\n this.setState({ center: center.toJSON() });\n\n }\n\n toggleDrawer() {\n this.setState({ drawer: !this.state.drawer })\n }\n\n onCenterDevice(device) {\n const { deviceTracks } = this.state;\n\n deviceTracks.getCurrentPosition(device.id).then(mc => {\n this.map.setCenter(mc);\n this.map.panTo(mc);\n });\n }\n\n onInfo(device, t) {\n const { hoverHint } = this.state;\n if (this._menulist) this._menulist.current.showDevice(device, t);\n hoverHint[device.id] = false;\n this.setState({ hoverHint });\n }\n\n onShowInfoClicked(device) {\n const { deviceTracks } = this.state;\n const track = deviceTracks.getTrack(device.id);\n track.setInfo(!track.info);\n if (track.info) {\n deviceTracks.getCurrentPosition(device.id).then(mc => {\n this.map.setCenter(mc);\n this.map.panTo(mc);\n });\n }\n this.setState({ deviceTracks });\n }\n\n onShowTrackClicked(device) {\n const { deviceTracks } = this.state;\n const track = deviceTracks.getTrack(device.id);\n track.setTracking(!track.track, (t) => {\n this.refresh()\n });\n this.setState({ deviceTracks });\n this.refresh();\n }\n\n onShowTrackVisible(device) {\n const { deviceTracks } = this.state;\n const track = deviceTracks.getTrack(device.id);\n track.setVisible(!track.visible);\n if (!track.visible)\n track.setTracking(false);\n this.setState({ deviceTracks });\n }\n\n onShowTail(device) {\n const { deviceTracks } = this.state;\n const track = deviceTracks.getTrack(device.id);\n track.setTail(!track.getTail())\n this.setState({ deviceTracks });\n this.refresh();\n }\n\n\n onHideOthers(dev) {\n const { deviceTracks } = this.state;\n for (let d in deviceTracks.getTracks()) {\n if (d != dev.id) {\n deviceTracks.getTrack(d).setVisible(false)\n deviceTracks.getTrack(d).setTracking(false)\n deviceTracks.getTrack(d).setInfo(false)\n }\n }\n this.setState({ deviceTracks });\n }\n\n onShowOthers(dev) {\n const { deviceTracks } = this.state;\n for (let d in deviceTracks.getTracks()) {\n if (d != dev.id) {\n deviceTracks.getTrack(d).setVisible(true)\n }\n }\n this.setState({ deviceTracks });\n }\n\n onDownloadGPX(mindate, maxdate, dev) {\n const { deviceTracks, trip } = this.state;\n\n let name = trip.name;\n let devid = \"\";\n\n if (dev) {\n name = dev.name || dev.id;\n devid = dev.id || \"\";\n }\n\n api.gpx(trip.id, devid, mindate, maxdate, name).then(gpx => {\n let blob = new Blob([gpx], { type: \"application/gpx+xml;charset=utf-8\" });\n saveAs(blob, name + \".gpx\");\n this.setState({ exportDevice: null, exportGPX: false });\n })\n }\n\n onShowTrackAll() {\n const { deviceTracks } = this.state;\n for (let d in deviceTracks.getTracks()) {\n deviceTracks.getTrack(d).setTracking(!this.state.trackAll, (t) => {\n this.refresh()\n })\n }\n this.setState({ deviceTracks, trackAll: !this.state.trackAll });\n this.refresh();\n }\n\n onTailAll() {\n const { deviceTracks } = this.state;\n for (let d in deviceTracks.getTracks()) {\n deviceTracks.getTrack(d).setTail(!this.state.tailAll, (t) => {\n this.refresh()\n })\n }\n this.setState({ deviceTracks, tailAll: !this.state.tailAll });\n this.refresh();\n }\n\n\n onShowInfoAll() {\n const { deviceTracks } = this.state;\n for (let d in deviceTracks.getTracks()) {\n deviceTracks.getTrack(d).setInfo(!this.state.infoAll)\n }\n this.setState({ deviceTracks, infoAll: !this.state.infoAll });\n }\n\n createMapOptions(maps) {\n //return {}\n let mt = localStorage.getItem(\"google_maptypeid\");\n if (mt) {\n // map.setMapTypeId(mt);\n } else {\n mt = \"hybrid\"\n }\n return {\n scrollwheel: true,\n scaleControl: true,\n rotateControl: true,\n mapTypeId: mt,\n mapTypeControl: false,\n mapTypeControlOptions: {\n style: google.maps.MapTypeControlStyle.DROPDOWN_MENU,\n position: google.maps.ControlPosition.RIGHT_TOP,\n mapTypeIds: ['roadmap', 'terrain', 'satellite', 'hybrid'],\n },\n //styles: [{ stylers: [{ 'saturation': -50 }, { 'gamma': 0.9 }, { 'lightness': 4 }, { 'visibility': 'on' }] }]\n }\n }\n\n onToggleTimeline(evt) {\n //this.setState({ timeline: !this.state.timeline, minDate: null, maxDate: null })\n this.setState({ timePopperAnchor: evt.target })\n }\n\n onSetTimestamp(t) {\n this.setState({ currentTS: t });\n window.requestAnimationFrame(this.refresh.bind(this));\n }\n\n onSelectTimeRange(dev, start, end) {\n const { deviceTracks } = this.state;\n const track = deviceTracks.getTrack(dev.id);\n track.setTracking(true);\n this.setState({ timeline: true, minDate: start, maxDate: end, deviceTracks })\n }\n\n onSelectTimeRangeHours(hrs) {\n if (hrs == -1) {\n this.setState({ timeline: false, timePopperAnchor: null, minDate: null, maxDate: null })\n return;\n }\n const { deviceTracks, trip } = this.state;\n let begin = new Date(trip.start);\n let end = this.getMaxDate();\n\n if (hrs != 0) {\n begin = new Date(end.getTime() - hrs * 3600 * 1000);\n }\n\n for (let d in deviceTracks.getTracks()) {\n deviceTracks.getTrack(d).setTracking(true)\n }\n\n this.setState({ timeline: true, minDate: begin, maxDate: end, deviceTracks, trackAll: true, timePopperAnchor: null });\n }\n\n changeMap(tp) {\n this.setState({ maptype: tp });\n this.map.setMapTypeId(tp);\n localStorage.setItem(\"google_maptypeid\", tp);\n }\n\n copyLink() {\n navigator.clipboard.writeText(window.location.href);\n }\n\n openMailer() {\n window.open(\"mailto:?subject=My Trip&body=Check out my Trip here: \" + encodeURIComponent(window.location.href));\n }\n\n setOpen(event) {\n this.setState({ open: event });\n }\n\n render() {\n const { classes, apiLoaded, gmid } = this.props;\n\n const { center, zoom, trip, devices, statistics, drawer, timeline, deviceTracks, errorOccured, errorText, hoverHint } = this.state;\n\n if (!apiLoaded) {\n return null\n }\n const handleClick = () => {\n this.setOpen(true);\n };\n\n const handleClose = () => {\n this.setOpen(false);\n };\n\n if (errorOccured) {\n return (\n
\n
\n \n
\n
Something went wrong, you might want to check your (time) filters if you want to see something else
\n
\n
\n )\n }\n\n if (!trip) {\n return (
)\n }\n\n let minDate = this.getMinDate();\n\n let mapClasses = [classes.map];\n if (drawer) mapClasses.push(classes.mapWithDrawer)\n if (timeline) mapClasses.push(classes.mapWithTimeline);\n\n let mapClass = clsx(...mapClasses)\n\n let allstats = deviceTracks.allWithPositions();\n\n let devmap = devices.reduce((p, d) => {\n p[d.id] = d;\n return p;\n }, {})\n\n let timelineComp = null;\n if (timeline)\n timelineComp = (\n this.onSetTimestamp(t)} />);\n\n const canTail = trip.tailSecs > 0 || this.state.tailSecs != null\n const mapTypeChanged = (evt) => {\n localStorage.setItem(\"google_maptypeid\", this.map.getMapTypeId());\n }\n const zoomChanged = (evt) => {\n //console.log(this.map.getZoom(), evt);\n }\n\n return (\n
\n this.setState({ exportDevice: null, exportGPX: false })}\n onExport={(from, until, device) => this.onDownloadGPX(from, until, device)}\n device={this.state.exportDevice}\n open={this.state.exportGPX}\n trip={this.state.trip}\n min={minDate}\n max={this.state.currentTS} />\n this.onSelectTimeRangeHours(hrs)}\n onClose={() => this.setState({ timePopperAnchor: null })} />\n this.toggleDrawer()}>{trip.name}\n \n
\n \n {trip.name}\n \n this.toggleDrawer()}>\n \n \n
\n \n Map type\n \n \n
\n Share your Trip\n
\n \n \n \n \n \n \n { this.openMailer() }}\n size=\"small\">\n \n \n { this.copyLink(), handleClick() }}\n size=\"small\">\n \n \n \n Successfully copied the link\n \n \n \n
\n
\n this.onShowInfoClicked(dev)}\n onShowTrackClicked={(dev) => this.onShowTrackClicked(dev)}\n onShowTrackVisible={(dev) => this.onShowTrackVisible(dev)}\n onShowTail={canTail ? (dev) => this.onShowTail(dev) : null}\n onShowOthers={(dev) => this.onShowOthers(dev)}\n onHideOthers={(dev) => this.onHideOthers(dev)}\n onDownloadGPX={(dev) => this.setState({ exportDevice: dev, exportGPX: true })}\n onShowTrackAll={() => this.onShowTrackAll()}\n onShowInfoAll={() => this.onShowInfoAll()}\n onTailAll={canTail ? () => this.onTailAll() : null}\n onToggleTimeline={(evt) => this.onToggleTimeline(evt)}\n onSelectTimeRange={this.onSelectTimeRange.bind(this)}\n ref={this._menulist}\n onCenter={(d) => this.onCenterDevice(d)}\n trip={trip}\n devices={devices}\n tracks={deviceTracks}\n />\n \n\n
\n \n {allstats.map(dt => {\n let d = dt.statistic;\n let id = dt.getImei(); // + \"-\" + dt.getID();\n let dev = devmap[d.imei];\n // if a new trip is pushed where devices has been removed,\n // the dev here can be empty. the user should do a reload\n if (!dev) return null;\n let lbl = dev.name ? dev.name : dev.id;\n let event = dt.getAt(this.state.currentTS);\n if (!event) return null;\n if (timeline) {\n // check if the event is before the begin of our timeline\n if (event.sent.getTime() < minDate.getTime()) {\n return null;\n }\n }\n let pos = event.position;\n if (!pos) return null;\n return {\n // event handler needed, so the hover event on the DeviceMarker works\n const { hoverHint } = this.state;\n hoverHint[id] = true\n this.setState({ hoverHint })\n }}\n onMouseLeave={(e) => {\n // event handler needed, so the hover event on the DeviceMarker works\n const { hoverHint } = this.state;\n delete hoverHint[id]\n this.setState({ hoverHint })\n }}\n position={pos}>\n \n \n })}\n \n {timelineComp}\n
\n
\n );\n\n }\n}\nconst tvp = withStyles(styles)(TripviewApp);\nfunction withMyHook(Component) {\n return function WrappedComponent(props) {\n const loaded = useApiIsLoaded();\n const map = useMap();\n\n return ;\n }\n}\n\nexport default withMyHook(tvp);","\"use strict\";\n\nimport MomentUtils from '@date-io/moment';\nimport { createTheme, MuiThemeProvider } from '@material-ui/core/styles';\nimport { MuiPickersUtilsProvider } from '@material-ui/pickers';\nimport { APIProvider } from '@vis.gl/react-google-maps';\nimport { Anonymous } from 'gstjs2/backend';\nimport React from 'react';\nimport { render } from 'react-dom';\nimport TripviewApp from './TripView';\n\nif (!window.location.origin) { // Some browsers (mainly IE) do not have this property, so we need to build it manually...\n window.location.origin = window.location.protocol + '//' + window.location.hostname + (window.location.port ? (':' + window.location.port) : '');\n}\n\n// achtung: sehr triviale implementierung, wenn cookies gleich enden geht das nicht!\nwindow.getSimpleCookie = function (name) {\n let match = document.cookie.match(new RegExp(name + '=([^;]+)'));\n if (match) return match[1];\n return null;\n}\n\nconst theme = createTheme({});\n\n\nfetch(\"/tripview/mapdata.json\").then((md) => {\n md.json().then(d => {\n let tripviewapp = (\n \n \n \n \n \n \n \n );\n\n // init the gstjs in anonymous mode\n Anonymous();\n\n render(tripviewapp, document.getElementById('main'));\n });\n});\n\n","var map = {\n\t\"./af\": 42786,\n\t\"./af.js\": 42786,\n\t\"./ar\": 30867,\n\t\"./ar-dz\": 14130,\n\t\"./ar-dz.js\": 14130,\n\t\"./ar-kw\": 96135,\n\t\"./ar-kw.js\": 96135,\n\t\"./ar-ly\": 56440,\n\t\"./ar-ly.js\": 56440,\n\t\"./ar-ma\": 47702,\n\t\"./ar-ma.js\": 47702,\n\t\"./ar-sa\": 16040,\n\t\"./ar-sa.js\": 16040,\n\t\"./ar-tn\": 37100,\n\t\"./ar-tn.js\": 37100,\n\t\"./ar.js\": 30867,\n\t\"./az\": 31083,\n\t\"./az.js\": 31083,\n\t\"./be\": 9808,\n\t\"./be.js\": 9808,\n\t\"./bg\": 68338,\n\t\"./bg.js\": 68338,\n\t\"./bm\": 67438,\n\t\"./bm.js\": 67438,\n\t\"./bn\": 8905,\n\t\"./bn-bd\": 76225,\n\t\"./bn-bd.js\": 76225,\n\t\"./bn.js\": 8905,\n\t\"./bo\": 11560,\n\t\"./bo.js\": 11560,\n\t\"./br\": 1278,\n\t\"./br.js\": 1278,\n\t\"./bs\": 80622,\n\t\"./bs.js\": 80622,\n\t\"./ca\": 2468,\n\t\"./ca.js\": 2468,\n\t\"./cs\": 5822,\n\t\"./cs.js\": 5822,\n\t\"./cv\": 50877,\n\t\"./cv.js\": 50877,\n\t\"./cy\": 47373,\n\t\"./cy.js\": 47373,\n\t\"./da\": 24780,\n\t\"./da.js\": 24780,\n\t\"./de\": 59740,\n\t\"./de-at\": 60217,\n\t\"./de-at.js\": 60217,\n\t\"./de-ch\": 60894,\n\t\"./de-ch.js\": 60894,\n\t\"./de.js\": 59740,\n\t\"./dv\": 5300,\n\t\"./dv.js\": 5300,\n\t\"./el\": 50837,\n\t\"./el.js\": 50837,\n\t\"./en-au\": 78348,\n\t\"./en-au.js\": 78348,\n\t\"./en-ca\": 77925,\n\t\"./en-ca.js\": 77925,\n\t\"./en-gb\": 22243,\n\t\"./en-gb.js\": 22243,\n\t\"./en-ie\": 46436,\n\t\"./en-ie.js\": 46436,\n\t\"./en-il\": 47207,\n\t\"./en-il.js\": 47207,\n\t\"./en-in\": 44175,\n\t\"./en-in.js\": 44175,\n\t\"./en-nz\": 76319,\n\t\"./en-nz.js\": 76319,\n\t\"./en-sg\": 31662,\n\t\"./en-sg.js\": 31662,\n\t\"./eo\": 92915,\n\t\"./eo.js\": 92915,\n\t\"./es\": 55655,\n\t\"./es-do\": 55251,\n\t\"./es-do.js\": 55251,\n\t\"./es-mx\": 96112,\n\t\"./es-mx.js\": 96112,\n\t\"./es-us\": 71146,\n\t\"./es-us.js\": 71146,\n\t\"./es.js\": 55655,\n\t\"./et\": 5603,\n\t\"./et.js\": 5603,\n\t\"./eu\": 77763,\n\t\"./eu.js\": 77763,\n\t\"./fa\": 76959,\n\t\"./fa.js\": 76959,\n\t\"./fi\": 11897,\n\t\"./fi.js\": 11897,\n\t\"./fil\": 42549,\n\t\"./fil.js\": 42549,\n\t\"./fo\": 94694,\n\t\"./fo.js\": 94694,\n\t\"./fr\": 94470,\n\t\"./fr-ca\": 63049,\n\t\"./fr-ca.js\": 63049,\n\t\"./fr-ch\": 52330,\n\t\"./fr-ch.js\": 52330,\n\t\"./fr.js\": 94470,\n\t\"./fy\": 5044,\n\t\"./fy.js\": 5044,\n\t\"./ga\": 29295,\n\t\"./ga.js\": 29295,\n\t\"./gd\": 2101,\n\t\"./gd.js\": 2101,\n\t\"./gl\": 38794,\n\t\"./gl.js\": 38794,\n\t\"./gom-deva\": 27884,\n\t\"./gom-deva.js\": 27884,\n\t\"./gom-latn\": 23168,\n\t\"./gom-latn.js\": 23168,\n\t\"./gu\": 95349,\n\t\"./gu.js\": 95349,\n\t\"./he\": 24206,\n\t\"./he.js\": 24206,\n\t\"./hi\": 30094,\n\t\"./hi.js\": 30094,\n\t\"./hr\": 30316,\n\t\"./hr.js\": 30316,\n\t\"./hu\": 22138,\n\t\"./hu.js\": 22138,\n\t\"./hy-am\": 11423,\n\t\"./hy-am.js\": 11423,\n\t\"./id\": 29218,\n\t\"./id.js\": 29218,\n\t\"./is\": 90135,\n\t\"./is.js\": 90135,\n\t\"./it\": 90626,\n\t\"./it-ch\": 10150,\n\t\"./it-ch.js\": 10150,\n\t\"./it.js\": 90626,\n\t\"./ja\": 39183,\n\t\"./ja.js\": 39183,\n\t\"./jv\": 24286,\n\t\"./jv.js\": 24286,\n\t\"./ka\": 12105,\n\t\"./ka.js\": 12105,\n\t\"./kk\": 47772,\n\t\"./kk.js\": 47772,\n\t\"./km\": 18758,\n\t\"./km.js\": 18758,\n\t\"./kn\": 79282,\n\t\"./kn.js\": 79282,\n\t\"./ko\": 33730,\n\t\"./ko.js\": 33730,\n\t\"./ku\": 1408,\n\t\"./ku.js\": 1408,\n\t\"./ky\": 33291,\n\t\"./ky.js\": 33291,\n\t\"./lb\": 36841,\n\t\"./lb.js\": 36841,\n\t\"./lo\": 55466,\n\t\"./lo.js\": 55466,\n\t\"./lt\": 57010,\n\t\"./lt.js\": 57010,\n\t\"./lv\": 37595,\n\t\"./lv.js\": 37595,\n\t\"./me\": 39861,\n\t\"./me.js\": 39861,\n\t\"./mi\": 35493,\n\t\"./mi.js\": 35493,\n\t\"./mk\": 95966,\n\t\"./mk.js\": 95966,\n\t\"./ml\": 87341,\n\t\"./ml.js\": 87341,\n\t\"./mn\": 5115,\n\t\"./mn.js\": 5115,\n\t\"./mr\": 10370,\n\t\"./mr.js\": 10370,\n\t\"./ms\": 9847,\n\t\"./ms-my\": 41237,\n\t\"./ms-my.js\": 41237,\n\t\"./ms.js\": 9847,\n\t\"./mt\": 72126,\n\t\"./mt.js\": 72126,\n\t\"./my\": 56165,\n\t\"./my.js\": 56165,\n\t\"./nb\": 64924,\n\t\"./nb.js\": 64924,\n\t\"./ne\": 16744,\n\t\"./ne.js\": 16744,\n\t\"./nl\": 93901,\n\t\"./nl-be\": 59814,\n\t\"./nl-be.js\": 59814,\n\t\"./nl.js\": 93901,\n\t\"./nn\": 83877,\n\t\"./nn.js\": 83877,\n\t\"./oc-lnc\": 92135,\n\t\"./oc-lnc.js\": 92135,\n\t\"./pa-in\": 15858,\n\t\"./pa-in.js\": 15858,\n\t\"./pl\": 64495,\n\t\"./pl.js\": 64495,\n\t\"./pt\": 89520,\n\t\"./pt-br\": 57971,\n\t\"./pt-br.js\": 57971,\n\t\"./pt.js\": 89520,\n\t\"./ro\": 96459,\n\t\"./ro.js\": 96459,\n\t\"./ru\": 21793,\n\t\"./ru.js\": 21793,\n\t\"./sd\": 40950,\n\t\"./sd.js\": 40950,\n\t\"./se\": 10490,\n\t\"./se.js\": 10490,\n\t\"./si\": 90124,\n\t\"./si.js\": 90124,\n\t\"./sk\": 64249,\n\t\"./sk.js\": 64249,\n\t\"./sl\": 14985,\n\t\"./sl.js\": 14985,\n\t\"./sq\": 51104,\n\t\"./sq.js\": 51104,\n\t\"./sr\": 49131,\n\t\"./sr-cyrl\": 79915,\n\t\"./sr-cyrl.js\": 79915,\n\t\"./sr.js\": 49131,\n\t\"./ss\": 85893,\n\t\"./ss.js\": 85893,\n\t\"./sv\": 98760,\n\t\"./sv.js\": 98760,\n\t\"./sw\": 91172,\n\t\"./sw.js\": 91172,\n\t\"./ta\": 27333,\n\t\"./ta.js\": 27333,\n\t\"./te\": 23110,\n\t\"./te.js\": 23110,\n\t\"./tet\": 52095,\n\t\"./tet.js\": 52095,\n\t\"./tg\": 27321,\n\t\"./tg.js\": 27321,\n\t\"./th\": 9041,\n\t\"./th.js\": 9041,\n\t\"./tk\": 19005,\n\t\"./tk.js\": 19005,\n\t\"./tl-ph\": 75768,\n\t\"./tl-ph.js\": 75768,\n\t\"./tlh\": 89444,\n\t\"./tlh.js\": 89444,\n\t\"./tr\": 72397,\n\t\"./tr.js\": 72397,\n\t\"./tzl\": 28254,\n\t\"./tzl.js\": 28254,\n\t\"./tzm\": 51106,\n\t\"./tzm-latn\": 30699,\n\t\"./tzm-latn.js\": 30699,\n\t\"./tzm.js\": 51106,\n\t\"./ug-cn\": 9288,\n\t\"./ug-cn.js\": 9288,\n\t\"./uk\": 67691,\n\t\"./uk.js\": 67691,\n\t\"./ur\": 13795,\n\t\"./ur.js\": 13795,\n\t\"./uz\": 6791,\n\t\"./uz-latn\": 60588,\n\t\"./uz-latn.js\": 60588,\n\t\"./uz.js\": 6791,\n\t\"./vi\": 65666,\n\t\"./vi.js\": 65666,\n\t\"./x-pseudo\": 14378,\n\t\"./x-pseudo.js\": 14378,\n\t\"./yo\": 75805,\n\t\"./yo.js\": 75805,\n\t\"./zh-cn\": 83839,\n\t\"./zh-cn.js\": 83839,\n\t\"./zh-hk\": 55726,\n\t\"./zh-hk.js\": 55726,\n\t\"./zh-mo\": 99807,\n\t\"./zh-mo.js\": 99807,\n\t\"./zh-tw\": 74152,\n\t\"./zh-tw.js\": 74152\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 46700;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\tid: moduleId,\n\t\tloaded: false,\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Flag the module as loaded\n\tmodule.loaded = true;\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = (module) => {\n\tvar getter = module && module.__esModule ?\n\t\t() => (module['default']) :\n\t\t() => (module);\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","__webpack_require__.nmd = (module) => {\n\tmodule.paths = [];\n\tif (!module.children) module.children = [];\n\treturn module;\n};","__webpack_require__.p = \"/tripview/\";","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t826: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = (chunkId) => (installedChunks[chunkId] === 0);\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = (parentChunkLoadingFunction, data) => {\n\tvar [chunkIds, moreModules, runtime] = data;\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tif(chunkIds.some((id) => (installedChunks[id] !== 0))) {\n\t\tfor(moduleId in moreModules) {\n\t\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t\t}\n\t\t}\n\t\tif(runtime) var result = runtime(__webpack_require__);\n\t}\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkId] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunktripview\"] = self[\"webpackChunktripview\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\nvar __webpack_exports__ = __webpack_require__.O(undefined, [787], () => (__webpack_require__(15414)))\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"names":["deferred","leafPrototypes","getProto","shapeColors","safe","rest","danger","shapeColorsHigh","token","fetchInit","method","body","ct","res","headers","Headers","cache","JSON","stringify","check","rsp","ok","json","status","Promise","resolve","location","href","then","e","reject","text","error","getParameter","key","query_string","vars","window","search","substring","split","i","length","pair","decodeURIComponent","arr","push","getParameters","formatLocalDate","dat","withtime","asInputFormat","dt","d","getDate","slice","m","getMonth","y","getFullYear","hh","getHours","mm","getMinutes","ss","getSeconds","fmt","date2UTC","Date","getUTCFullYear","getUTCMonth","getUTCDate","asUTC","UTC","isBetween","fromutc","tmutc","toutc","t","getTime","f","to","_deviceTS","lastchanged","changed","_devicesTS","devs","all","map","__rateTS","r","validto","validfrom","_rateTS","rates","_serviceTS","s","__serviceTS","_servicesTS","srvs","_bookingTS","b","service","rate","from","_bookingsTS","bks","_paymentTS","p","payment","request","done","_paymentsTS","ps","_providerTS","openingtimes","ot","_providersTS","_couponTS","db","coupon","ManagerApi","tok","fetch","usr","id","org","docs","office","officeid","accounts","contact","c","orgid","imei","skip","limit","uid","oid","l","level","type","until","encodeURIComponent","toISOString","frm","pars","uri","encodeURI","ts","tss","dev","st","trip","value","delaySecs","settings","device","data","name","comment","rescueService","configuration","gsm","satellite","rescueType","eh","owner","rcpts","chatid","hookparams","hookid","end","batchlimit","simulate","n","appl","human","appid","usrid","eid","onlyactive","prov","provs","user","provider","userdata","me","manager","organization","this","providerAccess","acc","filter","o","partner","sort","p1","p2","localeCompare","cats","c1","c2","sortindex","enabled","cat","sp","provid","ignorebookingid","partial","ignore","part","sv","sid","spids","toids","join","bid","state","providerid","email","externalid","onlyok","exact","bookingstate","comm","categoryid","ownerid","cancelled","zeroprice","bounds","includeowner","includeprovider","includecategory","canc","zero","cfg","subject","message","utc1","utc2","Math","round","days","srv","orgmanager","dbid","iban","bic","tx","len","payerid","paymentid","SafeguardApi","tour","visibility","index","fleet","tr","trid","fence","msg","channel","tos","dests","mess","pr","close","offset","parms","information","allowdevicedeactivation","enablestatusemail","statusemailtrigger","statusemailaddresses","em","pts","Safeguard","toLatLng","pt","lng","lat","latitude","longitude","layertype","high","shapecolor","color","weight","clickable","tpname","ptype","element","shopts","shapeOptions","rect","toBounds","points","info","center","radius","radiusmeter","trace","output","escalations","start","RescueApi","traceid","author","escid","tid","GlobalMailApi","PersistentGSTorage","localStorage","getItem","setItem","setToken","parse","setUser","setSelectedOrg","app","usersettings","k","val","getAppSettings","LocalHospital","Public","Message","SvgIcon","statusText","gettrip","tripid","nodevs","nostats","EventFetchWorker","queue","ignoreImeis","setInterval","_go","j","cb","_addJob","job","shift","evts","last","sent","workerQueue","eventEquals","e1","e2","eventCompare","DeviceTrack","track","tail","events","SortedSet","statistic","visible","useTail","setTracking","v","latestEvent","addEvent","evt","position","invalid","gpsfix","abs","clear","Iterator","iterate","forEach","findGreatestLessThanOrEqual","findLeastGreaterThanOrEqual","findLeast","findGreatest","lp","latestPosition","google","maps","LatLng","getCurrentPosition","addJob","api","event","addEvents","removeJobs","DeviceTracks","statistics","tracking","tailing","_info","_tracking","_tailing","tracks","update","latestTS","reduce","devmap","Object","keys","_fill","entries","addStatistic","hasPosition","pos","getCurrentPositionLatLng","LatLngBounds","positions","gp","extend","getCenter","zoom","DisplayedTrack","trackline","TrackLine","before","after","refresh","DoubleLine","_id","ll","_points","_color","_backingLine","Polyline","path","geodesic","strokeColor","strokeOpacity","strokeWeight","_frontLine","setMap","pt1","getPath","pt2","insertAt","setPath","pa_frontLineth2","_maps","_dlines","_markers","_createLines","latLng","label","opac","begin","icon","document","createElement","style","backgroundColor","padding","borderRadius","border","innerHTML","marker","AdvancedMarkerElement","title","content","curtrk","markers","oldmarkers","code","oldm","lbl","toLocaleString","createMarker","newDlines","oldlines","dline","olddl","show","dl","values","ExportDialog","props","min","max","urltext","React","prevProps","oldmin","oldmax","newstate","setState","onClose","onExport","toDate","current","select","focus","execCommand","err","console","open","classes","devname","devid","descr","fromu","tou","url","origin","Dialog","bind","DialogTitle","DialogContent","DialogContentText","DateTimePicker","onChange","onChangeMin","ampm","clearable","disableFuture","required","format","showTodayButton","onChangeMax","display","alignItems","Input","onClick","inputRef","className","flex","inputProps","readOnly","IconButton","onCopyToClipboard","InsertLink","infotext","target","DialogActions","Button","withStyles","theme","root","zIndex","fontSize","overflowX","options","noneOpt","TimePopper","option","onSelect","anchor","withNone","Popper","anchorEl","transition","TransitionProps","placement","Grow","transformOrigin","Paper","ClickAwayListener","onClickAway","MenuList","MenuItem","INDEX_COLORS","getMapIcon","bdata","btoa","colorFromDevice","num","charCodeAt","deviceMarkerStyle","width","height","backgroundImage","backgroundRepeat","backgroundSize","textAlign","fontWeight","deviceMarkerStyleLarge","DeviceMarker","deviceTrack","onInfo","sec_num","floor","hours","minutes","seconds","formatDuration","unit","temp","toFixed","distmeter","km","ml","sm","speedkmh","ignoreunit","mph","kn","outerlabel","result","LARGEPIN_UNTIL","hoverhint","lastSent","speedunit","unitSpeed","temperatureUnit","unitTemperature","pressureUnit","unitAirpressure","distanceunit","unitDistance","markerProps","deviceLabel","cssNames","paddingRight","float","whiteSpace","row","paddingTop","bcolor","markerStyle","labelStyle","cursor","needsLargePin","showPosition","positionInfo","showImei","imeiInfo","showName","devicename","showAltitude","altitudeInfo","showAGL","aglInfo","showSpeed","speedInfo","showVSpeed","vspeedInfo","showPos6D","position6d","showTemperature","temperature","showPressure","airpressure","altValue","alt","aglValue","speedValue","toSpeed","vspeedValue","verticalspeedms","pos6dValue","pos6d","tempValue","environment","toTemperature","pressureValue","toPressure","started","distance","elapsed","altmaxmin","aglmaxmin","speedmaxmin","vspeedmaxmin","lastsignal","lastmessage","lastmsgTS","maxAltitudeMeter","minAltitudeMeter","maxAGLMeter","minAGLMeter","tdiff","firstEvent","parseInt","toHHMMSS","avg","averageSpeedKmh","smin","minSpeedKmh","smax","maxSpeedKmh","vavg","averageVSpeedMs","vsmin","minVSpeedMs","vsmax","maxVSpeedMs","dist","distanceMeter","toDistance","lastMessage","lastMessageTime","ds","showTime","timeInfo","showLastSignal","lastSignal","showLastmessage","showDistance","showAltitudeMaxMin","showAGLMaxMin","showSpeedMaxMin","showVSpeedMaxMin","infoelement","borderBottom","flexDirection","justifyContent","showInfo","onMouseEnter","onHover","onMouseLeave","menuItemIconStyle","verticalAlign","DeviceElement","moreMenu","timePopperAnchor","_ref","onCenter","grow","elem","scrollIntoView","block","behavior","onHideOthers","onShowOthers","onShowInfoClicked","onShowTrackClicked","onShowTail","onVisibleTrack","onDownloadGPX","hrs","onSelectTimeRange","latestContact","stat","battery","BatteryUnknown","load","loadpercent","loading","charging","loadCharging","low","BatteryCharging20","Battery20","BatteryCharging30","Battery30","BatteryCharging50","Battery50","BatteryCharging60","Battery60","BatteryCharging80","Battery80","BatteryCharging90","Battery90","BatteryChargingFull","BatteryFull","duration","asDays","lastcontact","ttitle","icStyle","timepopup","latest","deltasec","moment","delta","durationWithPadding","moreActions","KeyboardArrowDown","moreActionsButton","KeyboardArrowUp","devicePanel","infoIcon","InfoOutlined","iconSmall","trackIcon","GpsOff","visIcon","Visibility","tailIcon","LinearScale","batteryIcon","batteryload","VisibilityOff","clsx","Info","GpsFixed","ref","devicePanelName","Wifi","devicePanelLastContact","Collapse","in","moreActionsPanel","moreActionButtonBar","moreAction","onShowInfo","size","onShowTrack","disabled","CenterFocusStrong","variant","People","PeopleOutline","onSelectTime","Timeline","enableGPXExport","CloudDownload","MenuDeviceList","_childrefs","showIntoView","onShowTrackVisible","onShowInfoAll","onShowTrackAll","onTailAll","onToggleTimeline","devices","orderedDevs","d1","d2","n1","n2","Boolean","listTitle","enable_gpx_export","getTrack","setChildRef","overflowY","boxShadow","margin","minWidth","lineHeight","marginLeft","marginRight","xmargin","transform","marginTop","marginBottom","baseInc","TimelineControl","_getDates","now","initTS","playing","playback","inc","sliderValue","minDate","maxDate","onSetTimestamp","onPause","updateValue","reverse","preventDefault","timer","clearTimeout","fld","beginStr","endStr","valueStr","undefined","year","month","day","hour","minute","second","fractionalSecondDigits","playIcon","controlIcon","onPlay","onTouchEnd","PlayArrow","pauseIcon","Pause","playbackIcon","valueLabel","sliderControl","Slider","slider","step","onValueChange","sliderLabels","startlabel","datecontainer","noValidate","TextField","onChangeDate","datetextField","InputProps","input","datetext","InputLabelProps","shrink","endlabel","controlbar","IconBar","FormControl","speedSelection","formControl","InputLabel","htmlFor","NativeSelect","speedtext","paddingLeft","breakpoints","down","flexWrap","paddingBottom","alignContent","spacing","playbw","TitleBar","onMenuClick","hidetitle","titleless","menuClicked","Menu","menuElement","children","logo","src","pg_logo_mini","top","left","opacity","spinner","TripviewApp","_menulist","maptype","log","apiLoaded","tailSecs","drawer","deviceTracks","displayedTrack","infoAll","trackAll","tailAll","timeline","currentTS","exportDevice","exportGPX","errorOccured","errorText","hoverHint","hn","global","hostname","endsWith","client","mqtt","tripTopic","statsTopic","on","topics","subscribe","topic","toString","startsWith","connectMqtt","stats","requestAnimationFrame","pname","centerAndZoomMap","defval","getDeviceStartupParameter","trackDevices","infoDevices","tailDevices","showdrawer","_asTS","mints","maxts","since","repainter","subtract","connectPushSockets","deviceList","tailSeconds","getTracks","mind","getMinDate","getTail","getSlice","getNext","dtracks","devtracks","calledZoom","getCenterAndBounds","fitBounds","panTo","setOptions","toJSON","mc","setCenter","showDevice","setInfo","setVisible","setTail","mindate","maxdate","gpx","blob","Blob","saveAs","mt","scrollwheel","scaleControl","rotateControl","mapTypeId","mapTypeControl","mapTypeControlOptions","MapTypeControlStyle","DROPDOWN_MENU","ControlPosition","RIGHT_TOP","mapTypeIds","getMaxDate","tp","setMapTypeId","navigator","clipboard","writeText","gmid","handleClose","setOpen","errorIcon","error_occured","css","sizeUnit","mapClasses","mapWithDrawer","mapWithTimeline","mapClass","allstats","allWithPositions","timelineComp","canTail","onSelectTimeRangeHours","toggleDrawer","Drawer","paper","drawerPaper","drawerHeader","pgLogo","drawerTitle","ChevronLeft","mapType","Select","native","changeMap","shareIconBox","Facebook","htmlColor","Twitter","openMailer","Mail","copyLink","Link","Snackbar","autoHideDuration","Alert","severity","onCenterDevice","mapId","gestureHandling","disableDefaultUI","onMapTypeIdChanged","getMapTypeId","onZoomChanged","createMapOptions","defaultCenter","defaultZoom","getImei","getAt","anchorPoint","tvp","flexGrow","menuButton","maxWidth","drawerWidth","textOverflow","overflow","flexShrink","Component","loaded","useApiIsLoaded","useMap","protocol","port","getSimpleCookie","match","cookie","RegExp","createTheme","md","tripviewapp","apiKey","version","M","utils","MomentUtils","render","getElementById","webpackContext","req","webpackContextResolve","__webpack_require__","Error","module","exports","__webpack_module_cache__","moduleId","cachedModule","__webpack_modules__","call","O","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","getter","__esModule","a","getPrototypeOf","obj","mode","ns","create","def","indexOf","getOwnPropertyNames","definition","defineProperty","enumerable","get","g","globalThis","Function","prop","prototype","hasOwnProperty","Symbol","toStringTag","nmd","paths","installedChunks","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","some","chunkLoadingGlobal","self","__webpack_exports__"],"sourceRoot":""}