@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 2.53 kB
JavaScript
import{Rect as O}from"@expofp/renderer";import{BOOTHS_PAINTER_MARKER as x,SEPARATOR as m}from"../../../../constants";import{createImageDef as T,createLayerDef as D}from"../../../../renderer";import c,{boothStore as H}from"../../../../store";import k from"../../../../store/init/init-booths";import{getChildLayers as G}from"../../../../store/init/init-layers";import{LayersMode as K}from"../../../../store/LayerStore";import{loadJs as U}from"../../../../tools/loaders";import{chunkArray as Y}from"../../../../utils";import{loadIcons as j}from"../../../../utils/imageloader";import{toRadians as v}from"../../../../utils/math";import F,{BG_LAYER_NAME as b,FG_LAYER_NAME as P}from"./config-bg";import J,{BOOTHS_CHUNK_SIZE as Z}from"./config-booths";import{getImageLayerName as q,getLayerIcons as z}from"./loadBoothsImages";function Q(e){return e.childLayers.length?e.childLayers:G(e,e.basePriority,15).layers}function _(e,t,h){return new Promise(async f=>{let r=[];const s=k(c,t),a=await F(t),i=[],d=Y(s,Z),l=H.booths.filter(o=>o.rect&&(!o.layer||o.layer===t||o.layer.childLayers.includes(t))&&o.exhibitors.find(n=>!!n.logoInBooth&&!!n.logo)&&!c.uiState.hideLogoInBooth),B=new Map(l.map(o=>[o.id,o.noLabels]));l.forEach(o=>o.noLabels=!0),s.length&&d.forEach((o,n)=>{i.push(J(e,`${t.name}${m}${x}${m}${n}`,o))}),l.forEach(o=>{o.noLabels=B.get(o.id)}),t.loaded=!0;const u=a.children.find(o=>o.name===b),y=a.children.find(o=>o.name===P),p=q(t.name),g=z(t),L={name:p,children:[]};g.length&&e.onLayerImages(p,async()=>{const o=await j(g),n=[];for(const I of o.filter(Boolean)){const{bounds:{x:$,y:w,height:A,angle:R,width:S},htmlImage:N}=I,C=new O({x:$,y:w},{x:$+S,y:w+A},v(R)),M=T(N,C);n.push({shape:M})}return{layer:L,children:n}}),u&&r.push({...u,name:`${a.name}${m}${b}`}),i.length&&r.push(...i),y&&r.push({...y,name:`${a.name}${m}${P}`}),g.length&&r.push(L);const E=t.childLayers.sort((o,n)=>o.basePriority-n.basePriority).map(async o=>_(e,o,!0));Promise.all(E).then(o=>{const n=o.flat();n.length&&r.push(...n),t.children=r,t.configured=!0,f(D(t.name,r,{hidden:!h}))})})}export default async function V(e,t){return e.configured?Promise.resolve({name:e.name,children:e.children}):new Promise(async(h,f)=>{if(c.layerStore.mode!==K.Default&&!window[`__fpPaths${e.name}`]&&!e.rootParent)try{await U(`${window.__dataUrlBase}fp.svg.${e.name}.js`)}catch{return f()}const r=Q(e);r.length&&(e.childLayers=r);const{layers:s}=c.layerStore;c.layerStore.layers=[...s,...r.filter(i=>!s.some(d=>d.name===i.name))];const a=await _(t,e,e.visible);h(a)})}