@expofp/floorplan
Version:
Interactive floor plan library for expos and events
6 lines (5 loc) • 2.85 kB
JavaScript
import{Point as S}from"@expofp/geometry";import{comparer as v,runInAction as g}from"mobx";import{ResizeObserver as E}from"resize-observer";import{applyKioskMode as u}from"../../components/Kiosk/kiosk-mode";import{KIOSK_ENABLE_KEY as w,VISIBILITY_STORAGE_KEY as b}from"../../constants";import x from"../../data";import{registerPlanDisposer as c}from"../../plan-lifecycle.js";import y from"../../tools/logger";import{isWebGlSupported as k}from"../../utils";import{detectLimitedModeViaImage as z}from"../../utils/detectLimitedModeViaImage";import{isLocalStorageAvailable as f}from"../../utils/localStorage";import{planAutorun as m,planReaction as T,planWhen as I}from"../../utils/plan-reactions.js";import R from"../../utils/preview-exhibitor.js";let s=null;export function bindRootElement(i){const e=window.__efpElement;if(!e)return;const{uiState:l}=i;l.rootElement=e;const r=(o,n)=>g("uiState.screenSize",()=>{l.screenSize=new S(o,n)});r(e.clientWidth,e.clientHeight),s?.disconnect(),s=new E(o=>{o.forEach(n=>{r(n.contentRect.width,n.contentRect.height)})}),s.observe(e)}export default function M(i){const{uiState:e,exhibitorStore:l}=i;bindRootElement(i),c(destroyUiHandlers);const r=R();if(r){const t=l.exhibitorById.get(r.id);t&&(e.previewExhibitor=t)}const o=typeof matchMedia<"u"?matchMedia(`(resolution: ${window.devicePixelRatio}dppx)`):null;if(o&&o.addEventListener){const t=()=>{e.devicePixelRatio=window.devicePixelRatio};o.addEventListener("change",t),c(()=>o.removeEventListener("change",t))}const n=r||!k?"full":"medium";x.isRebooking&&e.list.type==="search"&&!e.list.text&&i.selectExhibitors(),e.desiredOverlaySize=n,m(()=>{(e.searchFocused||e.menu)&&e.overlayPosition!=="left"&&(e.desiredOverlaySize="full")}),m(()=>{e.overlaySize!=="full"&&e.menu&&(e.menu=!1)}),I(()=>e.wsStarted||!e.wsShown,()=>{e.wsStarted=!0}),e.kiosk=f&&localStorage.getItem(w)==="1",window.__resett=d;function p(){i.reset()}let a;c(()=>clearTimeout(a));function d(){!e.kiosk||e.setKioskModeEnabled||(y.log("zzz2","reset timer"),clearTimeout(a),a=setTimeout(p,3e4),e.inIdle=!1)}m(()=>{const t=e.list;t.type==="search"&&(t.text==="kiosk=1"?u(e,!0):t.text==="kiosk=0"&&u(e,!1))}),T(()=>[e.kiosk,e.setKioskModeEnabled],([t,h])=>{t&&!h?d():clearTimeout(a)},{equals:v.structural}),f&&e.setVisibility(JSON.parse(localStorage.getItem(b)??"null")||{}),L(i)}export function destroyUiHandlers(){s&&(s.disconnect(),s=null)}async function L(i){try{if(!await z())return;i.uiState.setGlobalErrorMessage({title:"Unsupported Environment Detected",body:`
This application requires a proper server environment to function correctly.
For full functionality, please ensure the application is served through an HTTP/HTTPS server.
Some features may not work as expected in the current setup.
`.trim()})}catch(e){console.error(e)}}