@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.25 kB
JavaScript
import y from"../../core/Rect";import{svgArea as T}from"../../data/svg";import f,{uiState as c}from"../../store";import{convertLocalToGps as b}from"../../utils/gps";import{useReaction as u}from"../../utils/mobx";import{fitMapToLocalRect as p}from"./utils/geo-config";const i=c;export function useCameraReactions(s,e){u(()=>i.moveToBooths,r=>{const t=s.current;if(!r||!t||!e)return;const o=r.filter(m=>m.rect);if(o.length===0)return;const n=o.map(m=>m.rect),a=y.fromMultiple(n);p(t,a,e),i.moveToBooths=null}),u(()=>i.moveToRect,r=>{const t=s.current;!r||!t||!e||(p(t,r,e),i.moveToRect=null)}),u(()=>i.zoomBy,r=>{const t=s.current;!r||!t||(t.flyTo({zoom:t.getZoom()+(r>1?.5:-.5),animate:!0,duration:500}),i.zoomBy=null)}),u(()=>c.moveToLocation,r=>{const t=s.current,o=f.routeStore.currentPosition;if(!r||!t||!o)return;const{lng:n,lat:a}=o,m=typeof n=="number"&&Number.isFinite(n)&&typeof a=="number"&&Number.isFinite(a);let l;if(m)l=[n,a];else{if(!e)return;l=b(o.x,o.y,e.gpsConfig)}t.flyTo({center:l,animate:!0,duration:1e3}),t.once("moveend",()=>{c.moveToLocation=!1})}),u(()=>c.centerMap,r=>{const t=s.current;if(!r||!t||!e)return;if(!(c.list.type==="search"&&!c.list.text)){const n=f.layerStore.rectangle||T;p(t,n,e,{padding:0})}c.centerMap=!1})}