@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.8 kB
JavaScript
import{createKiosk as f}from"../components/Kiosk/kioskApi";import{getSavedKiosk as u}from"../components/Kiosk/SetKiosk";import{KIOSK_STATS_ID_STORAGE_KEY as c}from"../components/Kiosk/SetKiosk/constants";import l from"../data";import{getLocationHistory as p}from"../services/routing";import{uiState as d}from"../store";import i from"./logger";import{createTelemetry as g}from"./telemetry";let a;function S(){if(a)return a;const r=window.__efpEvent;let e;try{const t=new URL(l.trackerUrl).searchParams.get("expoId");e=t?Number(t):void 0}catch(t){i.error(t)}return a=g({url:"https://app.expofp.com/api/telemetry",expo:r,expoId:e}),a}function s(r,e){const t=p(),n=t[t.length-2];return{type:r,value:e!==void 0?String(e):"",timestamp:new Date().toISOString(),url:window.location.href,referrer:n?window.location.origin+n:""}}function v(){return!!l?.trackerUrl&&process.env.NODE_ENV==="production"&&!d.heatmap}export default async function k(r,e){if(i.log("trackEvent",r,e),!!v())try{const t=S(),n=u();if(n){const o=await y(n);if(o)t.setKioskId(o);else{t.enqueue(s(r,e));return}}h(t),await t.send(s(r,e))}catch(t){i.error("trackEvent",String(t))}}async function y(r){if(!r)return null;let e=localStorage.getItem(c);return e||(e=await f(r,"https://app.expofp.com/"),e?(localStorage.setItem(c,e),e):null)}let m=!1;function h(r){if(m)return;m=!0;const e="efp-track-events";try{const t=localStorage.getItem(e);if(!t)return;const n=JSON.parse(t);if(!Array.isArray(n)){localStorage.removeItem(e);return}for(const o of n)!o||typeof o!="object"||!o.headers||r.enqueue({type:o.type,value:o.value!==void 0?String(o.value):"",timestamp:o.timeStamp,url:o.headers["X-href"],referrer:o.headers["X-ref"]??""});localStorage.removeItem(e)}catch(t){localStorage.removeItem(e),i.error("Failed to migrate old events.",String(t))}}