@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.11 kB
JavaScript
import{jsx as p}from"react/jsx-runtime";import{Gallery as u}from"@expofp/ui";import{observer as v}from"mobx-react-lite";import{useCallback as x,useState as L}from"react";import{eventScopedCache as S}from"../tools/event-scoped-cache.js";import{t as n}from"../utils/i18n";import{loadImage as b}from"../utils/loadImage";import{useRenderTarget as h}from"../utils/useRenderTarget";const C=o=>{const e=o.split("/"),r=e[e.length-1];return r.includes("original-")||(e[e.length-1]="original-"+r),e.join("/")},m=S(),I=o=>{const e=m().get(o);if(e)return e;const r=C(o),i=r===o?Promise.resolve(o):b(r).then(l=>l?r:o);return m().set(o,i),i},T=v(o=>{const{images:e,...r}=o,i=h(),[l,d]=L({}),f=x(t=>{const s=e[t];s&&I(s).then(a=>{a!==s&&d(c=>c[s]===a?c:{...c,[s]:a})})},[e]),g=e.map(t=>({thumbnailUrl:t,fullUrl:l[t]??t}));return p(u,{...r,images:g,closeLabel:n("Close"),zoomInLabel:n("Zoom In"),zoomOutLabel:n("Zoom Out"),nextSlideLabel:n("Next slide"),prevSlideLabel:n("Prev slide"),fullscreenLabel:n("View fullscreen"),itemLabel:t=>n("View image {{index}}",{index:t+1}),renderTarget:i,onSlideActivate:f})});export default T;