@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 1.05 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{t as n}from"../utils/i18n";import{loadImage as b}from"../utils/loadImage";import{useRenderTarget as S}from"../utils/useRenderTarget";const h=o=>{const e=o.split("/"),r=e[e.length-1];return r.includes("original-")||(e[e.length-1]="original-"+r),e.join("/")},m=new Map,C=o=>{const e=m.get(o);if(e)return e;const r=h(o),i=r===o?Promise.resolve(o):b(r).then(l=>l?r:o);return m.set(o,i),i},I=v(o=>{const{images:e,...r}=o,i=S(),[l,d]=L({}),g=x(t=>{const s=e[t];s&&C(s).then(a=>{a!==s&&d(c=>c[s]===a?c:{...c,[s]:a})})},[e]),f=e.map(t=>({thumbnailUrl:t,fullUrl:l[t]??t}));return p(u,{...r,images:f,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:g})});export default I;