@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.76 kB
JavaScript
import{Rect as o}from"@expofp/geometry";import{reaction as s}from"mobx";import{createBookmarkCanvas as k,createImageDef as m,getClampedBoundsCanvas as c,getRollValue as l,getRotation as p}from"../../../../renderer";import{layersStore as a,uiState as h}from"../../../../store";import{BoothDrawerBaseWithoutPainter as u}from"./BoothDrawerBase";export default function f(r,e){if(!h.kiosk)return new b(r,e)}class b extends u{constructor(e,t){super(t),this.getShape=()=>this.shape,this.rendererService=e,this.padding=this.booth.borderWidth/2,this.rect=new o(this.booth.rect.center,this.booth.rect.size,this.booth.rotate),this.canvas=k(11,devicePixelRatio),this.bookmarkId=`bookmark-${this.booth.id}`,this.shape=m(this.canvas,this.rect,{hidden:!t.bookmarked}),s(()=>[t.bookmarked,a.layersLoaded,this.booth.skipDim],()=>this.update(t.bookmarked),{fireImmediately:t.bookmarked}),s(()=>h.mapSettings,({roll:n})=>{l(n)&&this.rendererService.onRoll(`bookmark-roll-${this.bookmarkId}`,d=>{const i=p(d,this.rect.rotation);return i!==void 0&&(this.rect=new o(this.rect.center,{x:this.rect.size.y,y:this.rect.size.x},this.rect.rotation+i),this.handleBookmarkScale()),this.shape})},{fireImmediately:!0})}update(e){a.layersLoaded&&(this.shape.hidden=!e,this.shape.dim=this.booth.skipDim?!1:void 0,this.handleBookmarkScale(),this.shape.hidden?(this.rendererService.ptScaleRegistry.unregisterByName(this.bookmarkId),this.rendererService.rollRegistry.unregisterByName(`bookmark-roll-${this.bookmarkId}`)):this.rendererService.onPtScale(this.bookmarkId,this.handleBookmarkScale.bind(this)),this.rendererService.update(this.shape))}handleBookmarkScale(e){if(!this.shape.hidden)return this.shape.bounds=c(this.rect,this.canvas,this.padding,e||this.rendererService.scale),this.shape}}