@expofp/floorplan
Version:
Interactive floor plan library for expos and events
2 lines (1 loc) • 2.83 kB
JavaScript
import{jsx as c}from"react/jsx-runtime";import"./EntityList.scss";import{observer as x}from"mobx-react-lite";import{lazy as v,Suspense as C,useCallback as T,useContext as L,useEffect as E,useRef as w}from"react";import e,{uiState as t}from"../store";import R from"../tools/settings";import P from"../ui/Spinner";import{t as I}from"../utils/i18n";import O from"./EntityListRow";import{OverlayScrollContext as H}from"./Overlay";const S=()=>import("react-virtuoso").then(r=>({default:r.Virtuoso})).catch(()=>new Promise(r=>setTimeout(()=>r(S()),3e3))),V=v(S),_=["ipia2025"],z=({updatedScrollableRef:r,updateScroll:m})=>{const f=L(H),a=w(null),b=t.getListScrollItemId(t.list.type),g=_.includes(R.EXPO);E(()=>{const n=t.getListScrollTop(t.list.type),l=t.getListScrollItemId(t.list.type);(n>0||l)&&setTimeout(()=>{if(a.current){if(l){const o=t.listItems.findIndex(s=>s?.id?.toString()===l.toString());if(o!==-1){a.current.scrollToIndex({index:o,align:"center",behavior:"auto"});return}}n>0&&a.current.scrollTo({top:n,behavior:"auto"})}},100)},[t.list.type]);const u=t.showRouteInstantly,y=T((n,l)=>{const o=parseInt(l,10);switch(t.setListScrollItemId(t.list?.type,o),a.current?a.current.getState(s=>{const h=s?.scrollTop||0;t.setListScrollTop(t.list?.type,h)}):r.current&&t.setListScrollTop(t.list?.type,r.current.scrollTop||0),n){case"exhibitor":const s=e.exhibitorStore.exhibitors.find(i=>i.id===o);u?e.routeStore.clickRoute(null,e.routeStore.tempToBooth||s.booths[0]):e.clickExhibitor(s);break;case"booth":const h=e.boothStore.booths.find(i=>i.id===o);u?e.routeStore.clickRoute(null,h):e.clickBoothInList2(h);break;case"category":e.clickCategory(e.categoryStore.categories.find(i=>i.id===o));break;case"event":const p=e.eventStore.eventItems.find(i=>i.id===o);if(p){const i=e.boothStore.booths.find(d=>d.id===p.boothId);u&&i?e.routeStore.clickRoute(null,i):e.selectEventItem(p,!0)}break;case"speaker":{const i=e.speakerStore.speakers.find(d=>d.id===o);i&&e.selectSpeaker(i,!0);break}}},[u,r]),k=()=>c("div",{className:"list-empty",children:t.list.type==="search"?I("Oops, nothing found"):I("No items to show")});return f===null||t.setKioskModeEnabled?null:t.listItems.length?c("div",{style:{height:"100%",cursor:"pointer",resize:"both",minHeight:100},children:c(C,{fallback:c(P,{active:!0,isCenter:!0}),children:c(V,{ref:a,className:"list-virtual",style:{minHeight:t.listItems.length?"1px":0},data:t.listItems,itemContent:(n,l)=>{const o=l;if(!o)return null;const s=b?.toString()===o.id?.toString();return c(O,{item:o,index:n,current:s,compactDetails:g,onClick:y},o.id)},itemsRendered:()=>m&&setTimeout(m),totalListHeightChanged:()=>m&&m(),customScrollParent:f,totalCount:t.listItems.length,overscan:20,increaseViewportBy:200,initialItemCount:Math.min(t.listScrollIndex+30,t.listItems.length)})})}):c(k,{})};export default x(z);