@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 913 B
JavaScript
import{update as p}from"@expofp/renderer";import{useRef as y}from"react";import a from"../../store";import{useReaction as L}from"../../utils/mobx";import{fitMapToLocalRect as b}from"./utils/geo-config";import{collectLayerDefsByName as h}from"./utils/layer-defs";export function useLayerVisibilitySync(r,s,l){const n=y(null),c=y(null);L(()=>a.layerStore.layers.map(t=>`${t.name}:${t.visible?1:0}`),()=>{if(!r)return;n.current?.rootLayer!==r.rootLayer&&(n.current={rootLayer:r.rootLayer,defsByName:h(r.rootLayer)});const t=n.current.defsByName,i=[];for(const e of a.layerStore.layers){const m=t.get(e.name);if(m?.length)for(const f of m){const u=!e.visible;f.hidden!==u&&(f.hidden=u,i.push(f))}}i.length&&p(...i);const o=a.layerStore.layers.find(e=>e.visible&&!e.frozen&&!e.rootParent&&!e.pathway);if(!o||c.current===o.name)return;c.current=o.name;const d=o.viewbox??o.rect;b(s.current,d??null,l)},void 0,[r,s,l])}