UNPKG

@expofp/floorplan

Version:

Interactive floor plan library for expos and events

2 lines (1 loc) • 7.83 kB
import{applyIntents as G,getConfig as h,parseDeprecatedUrlParams as K,parseFromUrlTolerant as V,parseIntentsFromUrl as Y,parseLegacyQuery as k,serializeSelection as Q}from"@expofp/config";import{Box as W}from"@expofp/geometry";import{UrlConfigSchema as z}from"@expofp/schema";import{safeDecode as p}from"@expofp/utils";import{autorun as v,runInAction as H,when as d}from"mobx";import{applyKioskMode as j}from"../components/Kiosk/kiosk-mode";import{recoverKioskFromUrlPrams as N}from"../components/Kiosk/recoverKioskFromUrlPrams";import{LEGACY_PREVIEW_MODE_STORAGE_KEY as $,LEGACY_VIEWER_MODE_STORAGE_KEY as q,PREVIEW_MODE_STORAGE_KEY as E,VIEWER_MODE_STORAGE_KEY as I}from"../constants";import J from"../data";import i,{uiState as o}from"../store";import{BoothBase as w}from"../store/BoothStore";import{CurrentPosition as X,extractRoute as Z}from"../store/RouteStore";import{setConsentSettings as ee}from"../tools/gtag";import x from"../tools/logger";import{areLayersEnabled as te}from"../utils/areLayersEnabled";import{brand as M}from"../utils/brand";import{cameraToMapSettings as B}from"../utils/camera-map-settings";import{handleCustomCommand as oe}from"../utils/customCommands";import{formatEventTitle as re,formatPlaceholderTitle as ie}from"../utils/event-title";import{getMostFrequent as ne}from"../utils/getMostFrequent";import{heatmapEnabled as se}from"../utils/heatmap-enabled";import ae from"../utils/is-own-domain";import{isLocalStorageAvailable as P}from"../utils/localStorage";import{stripTrackingParams as le}from"../utils/trackingParams";import{rewriteMultiSlugQuery as ce}from"./multi-slug";import{currentSearch as m,disableUrlWrites as ue,initUrlSync as me,pushQuery as fe,replaceQuery as f}from"./url-sync";let y=!1;export function applyDeclarativeConfig(){S(h()),d(()=>i.layerStore.layersLoaded,()=>{const e=h().camera;Object.keys(e).length&&A(B(e));const t=h().visibility;Object.keys(t).length&&o.setVisibility(t)})}export function initUrlRouting(e){me({offHistory:e,onNavigate:b}),O(),g(),d(()=>i.layerStore.layersLoaded,()=>{i.urlFilterManager&&!i.urlFilterManager.isInitialized&&i.urlFilterManager.initialize(),b(),v(_),v(T),o.viewerMode&&(o.menu=!0)})}export function applyParameters(e=""){f("?"+p(e.toString())),i.layerStore.layersLoaded?L(e):(g(),d(()=>i.layerStore.layersLoaded,()=>L(e)))}function L(e){const t="?"+p(e),r=ye(t),n=[...r.intents??[],...Y(t).intents],{intents:c=[],...l}=K(t,{visibility:r.visibility,consent:r.consent,intents:n});S(r),S(l);const a=r.consent??l.consent;a&&ee(a),r.camera&&Object.keys(r.camera).length&&A(B(r.camera)),r.visibility&&Object.keys(r.visibility).length&&o.setVisibility(r.visibility),O(),b();const s=[...n,...c];s.length&&G(i.fp,s)}function g(){const e=m(),t=e.length>1?p(e.substring(1)):"";return oe(t)}function b(){y=!0;try{const e=new URLSearchParams(p(window.location.search));N(e);const{primary:t}=k(m()),r=t.type==="select"&&(!t.slug||/^t=[^&]*$/.test(t.slug))&&(o.heatmap||o.heatmapYah);!g()&&!r&&pe(t)}finally{y=!1}T(),_()}function pe(e){const t=i.fp;switch(e.type){case"kiosk":e.enabled!==null&&j(o,e.enabled);return;case"list":t.showList(e.list);return;case"tour":t.selectTour(e.tourId);return;case"planner":t.openPlanner({items:e.items,from:e.from,fromBookmarks:e.fromBookmarks});return;case"route":{i.routeStore.setOnlyAccessible(e.accessible),i.routeStore.selectRoute(Z(e.from??"",e.to??"",e.waypoints)),i.uiState.setIsMultiPointRoute(e.waypoints.length>0),e.title&&i.uiState.setRouteTitle(e.title);return}case"selectExhibitors":setTimeout(()=>t.selectExhibitor(e.values),250);return;case"ownedByFilters":x.log("Skipping filter parameters in dispatchFromUrl (owned by URLFilterManager)");return;case"ownedByConfig":return;case"select":t.select(e.slug);return}}export function applyPathway(e){const{pathwayId:t,boothIds:r,exhibitorIds:n}=e,c=i.boothStore.booths.filter(s=>r.includes(s.externalId)),l=i.exhibitorStore.exhibitors.filter(s=>n.includes(s.externalId)).flatMap(s=>s.booths),a=[...c,...l];if(te()){const s=ne(a.map(u=>u.layer.name));s&&i.fp.activateFloor({name:s})}(r.length>0||n.length>0)&&i.fp.highlightEntities([...r,...n]),i.layerStore.showPathWay(t),a.length>0&&H(()=>{i.uiState.moveToRect=W.fromUnion(...a.map(s=>s.rect).filter(Boolean)),i.uiState.rollReset=!0})}function O(){const{oneShots:e}=k(m());for(const r of e)de(r);const t=le(m());t!==null&&f("?"+t),o.previewExhibitor&&f("?"+o.previewExhibitor.slug),he()}function de(e){switch(e.type){case"heatmap":R(e.yah);return;case"blueDot":{const t=new X(e.x,e.y,i.layerStore.findLayer(e.layer??"")?.name,void 0,e.lat,e.lng);d(()=>i.layerStore.layersLoaded,()=>i.routeStore.selectCurrentPosition(t,!0,1));return}case"viewerMode":P&&(e.enabled?localStorage.setItem(I,"true"):(localStorage.removeItem(I),localStorage.removeItem(q)));return;case"previewMode":P&&(e.enabled?localStorage.setItem(E,"true"):(localStorage.removeItem(E),localStorage.removeItem($)));return;case"uiScale":e.scale!==null?i.uiState.setUIScale(e.scale,!0):x.warn(`Invalid ui-scale parameter: ${e.raw}. Must be a number between 0.8 and 1.4.`);return;case"resetUiScale":i.uiState.resetUIScale();return}}function R(e){ue(),e?(o.heatmapYah=!0,o.monochrome=!0,o.hideLogoInBooth=!0,o.hideHeaderLogo=!0,o.disableBookmarked=!0):o.heatmap=!0}function he(){const e=ce(m(),t=>i.exhibitorStore.exhibitors.find(n=>n.slug===t||n.externalId===t)?.name);e!==null&&f(e)}function S(e){e.noOverlay!==void 0&&(o.hideOverlay=e.noOverlay),e.monochrome&&(o.monochrome=!0),e.hideHeaderLogo&&(o.hideHeaderLogo=!0),e.hideLogoInBooth&&(o.hideLogoInBooth=!0),e.disableFeatured&&i.exhibitorStore.exhibitors.forEach(t=>t.featured=!1),e.disableBookmarked&&(o.disableBookmarked=!0),e.disableGps&&i.routeStore.setGpsTrackingEnabled(!1),e.heatmap&&se(e.heatmap)&&R(e.heatmap.variant==="yah")}function ye(e){return V(z,e).value}let U=null,F=null,C=null;function T(){const{selection:e,exhibitor:t,booth:r,eventItem:n}=ge(),c=i.urlFilterManager.filterSearch();if(y)return;const l=Q(e)||c;m()!==l&&(t!==U||r!==F||n!==C?fe(l):f(l),U=t,F=r,C=n)}function ge(){const e=o.selectedExhibitor,t=o.selectedBooth,r=o.selectedEventItem,n=o.selectedRoute,c=o.selectedSpeaker,l=o.setKioskModeEnabled,a=o.list;let s;if(a.type==="route-planner"&&!e&&!t&&!r){const u=i.routePlannerStore;s={type:"planner",fromBookmarks:u.source==="bookmarks",items:u.items.map(D=>D.entity.slug).filter(Boolean),from:u.startPoint?.slug||void 0}}else if(n&&!o.isMultiPointRoute)s={type:"route",to:n.to instanceof w?n.to.slug:void 0,from:n.from instanceof w?n.from.slug:void 0,accessible:i.routeStore.onlyAccessible,waypoints:n.waypoints?.map(u=>u.slug)};else if(e)s={type:"slug",slug:e.slug};else if(t)s={type:"slug",slug:t.slug};else if(r)s={type:"slug",slug:r.slug};else if(c)s={type:"slug",slug:c.slug};else if(l)s={type:"none"};else switch(a.type){case"bookmarks":case"visited":case"sessions":case"exhibitors":case"speakers":case"tours":case"language":s={type:"list",list:a.type};break;case"category":s={type:"slug",slug:o.selectedCategory?.slug??""};break;case"search":s={type:"slug",slug:a.text||""};break;case"filter":s={type:"filter",key:a.query.key,value:a.query.value};break;case"multi-point-tour":s={type:"tour",tourId:a.tourId};break;default:throw new Error("Unkown list.type")}return{selection:s,exhibitor:e,booth:t,eventItem:r}}function _(){if(!ae)return;const e=o.selectedExhibitor,t=o.selectedEventItem,r=o.selectedSpeaker;let n="";e?n=e.name:t?n=t.name:r?n=r.name:o.list.type==="search"&&o.list.text?n="`"+(o.list.text||"")+"`":o.list.type==="multi-point-tour"&&o.tourTitle&&(n=o.tourTitle),n.length&&(n+=" \u2013 "),n+=re(J,M)??ie(window.location.hostname,M),document.title=n}function A(e){try{if(o.setMapSettings(e),e.z){const t=i.layerStore.layers.find(r=>r.name===e.z);t&&i.layerStore.updateVisibility(t,!0)}}catch(t){console.error("Failed to process map settings.",t)}}