PageSourceSearch

https://www.customerconnectexpo.com/assets/VisitorExhibitorsPage-DuvIKyNB.js

js customerconnectexpo.com collected 2026-09-29 14:17:26 UTC 3,573 bytes, 1 lines download raw bytes

1import{j as e}from"./vendor-ui-CEGjIuqP.js";import{r as o,L as j}from"./vendor-react-BT-Op1j_.js";import{a9 as y,S as N,I as v,aQ as b,aR as _,aS as w,aT as S,aU as d,L as C,y as L,K as E,da as A,at as I,s as T}from"./index-DgkqAiwu.js";import{u as V}from"./vendor-data-CqtBkUbK.js";import{F as q}from"./FavoriteHeartButton-CjquTDKU.js";import"./vendor-charts-F376sfYw.js";import"./vendor-editor-CAsPUtf2.js";import"./vendor-dnd-D3FEUJ2d.js";const i="__all__";function k(){const[l,x]=o.useState(""),[a,u]=o.useState(i),{data:t,isLoading:h}=V({queryKey:["visitor-exhibitors"],queryFn:async()=>{const{data:s,error:r}=await T.from("exhibitors").select("id, name, short_description, logo_url, booth_number, category").eq("is_active",!0).or("approval_status.eq.approved,approval_status.is.null").order("name",{ascending:!0});if(r)throw r;return s||[]},staleTime:60*1e3}),p=o.useMemo(()=>t?Array.from(new Set(t.map(s=>s.category).filter(Boolean))):[],[t]),n=o.useMemo(()=>{if(!t)return[];const s=l.trim().toLowerCase();return t.filter(r=>{var c,m;const f=!s||((c=r.name)==null?void 0:c.toLowerCase().includes(s))||((m=r.short_description)==null?void 0:m.toLowerCase().includes(s)),g=a===i||r.category===a;return f&&g})},[t,l,a]);return e.jsxs(e.Fragment,{children:[e.jsx(y,{children:e.jsx("title",{children:"Exhibitors - Visitor Portal"})}),e.jsxs("section",{className:"mb-6",children:[e.jsx("h1",{className:"text-3xl font-bold text-foreground mb-2",children:"Exhibitors"}),e.jsx("p",{className:"text-muted-foreground",children:"Explore exhibitors and find your way to their booths."})]}),e.jsxs("div",{className:"mb-6 flex flex-col gap-3 sm:flex-row sm:items-center",children:[e.jsxs("div",{className:"relative max-w-md flex-1",children:[e.jsx(N,{className:"absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-muted-foreground"}),e.jsx(v,{placeholder:"Search exhibitors...",value:l,onChange:s=>x(s.target.value),className:"pl-9"})]}),e.jsxs(b,{value:a,onValueChange:u,children:[e.jsx(_,{className:"sm:w-56",children:e.jsx(w,{placeholder:"All categories"})}),e.jsxs(S,{children:[e.jsx(d,{value:i,children:"All categories"}),p.map(s=>e.jsx(d,{value:s,children:s},s))]})]})]}),h?e.jsx("div",{className:"flex items-center justify-center py-12",children:e.jsx(C,{className:"h-8 w-8 animate-spin text-primary"})}):n.length===0?e.jsx("p",{className:"py-12 text-center text-muted-foreground",children:"No exhibitors match your search."}):e.jsx("div",{className:"grid gap-4 sm:grid-cols-2 lg:grid-cols-3",children:n.map(s=>e.jsxs(L,{className:"relative flex flex-col",children:[e.jsx("div",{className:"absolute right-3 top-3",children:e.jsx(q,{itemType:"exhibitor",itemId:s.id})}),e.jsxs(E,{className:"flex flex-1 flex-col pt-6",children:[e.jsxs("div",{className:"mb-3 flex items-center gap-3",children:[s.logo_url?e.jsx("img",{src:s.logo_url,alt:s.name,className:"h-14 w-14 rounded-lg border object-contain p-1"}):e.jsx("div",{className:"flex h-14 w-14 items-center justify-center rounded-lg bg-muted",children:e.jsx(A,{className:"h-6 w-6 text-muted-foreground"})}),e.jsxs("div",{className:"min-w-0 pr-8",children:[e.jsx("h3",{className:"truncate font-semibold",children:s.name}),s.booth_number&&e.jsxs(I,{variant:"secondary",className:"mt-1",children:["Booth ",s.booth_number]})]})]}),s.short_description&&e.jsx("p",{className:"mb-4 line-clamp-3 flex-1 text-sm text-muted-foreground",children:s.short_description}),e.jsx(j,{to:`/exhibitors/${s.id}`,className:"mt-auto text-sm font-medium text-primary hover:underline",children:"View Details"})]})]},s.id))})]})}export{k as default};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.