PageSourceSearch

https://rubpage.com/assets/PoiZonePage-_K1HDpgl.js

js rubpage.com collected 2026-09-25 06:30:39 UTC 6,239 bytes, 1 lines download raw bytes

1import{j as e}from"./vendor-query-nkyHp8gL.js";import{h as M,k as T,r as _,L as u}from"./vendor-react-BNT0nzvx.js";import{u as E,t as F,e as I,L as h,n as v,P as j,f as R,M as S,a2 as Z}from"./index-BG1hbjB_.js";import{B as O}from"./Breadcrumbs-BM40yG2Q.js";import{C as Q}from"./CityListingsPagination-BWoVj5SQ.js";import{a as D,b as W,u as q}from"./use-poi-zones-C_oXE4Ef.js";import"./vendor-ui-DPPUfW-O.js";import"./vendor-charts-B_MCcq71.js";import"./vendor-supabase-BRDBMtg7.js";import"./chevron-right-Bjkf53ML.js";import"./chevron-left-C3mMA6Uk.js";const z={hotel_zone:"This area is commonly visited by travelers and hotel guests looking for relaxation services nearby.",convention:"This area is popular with business visitors and convention attendees seeking massage and relaxation options.",airport:"Conveniently located near the airport — ideal for travelers seeking relaxation after a flight.",downtown:"The heart of the city with easy access to a variety of service providers.",business_district:"A busy area where professionals often seek relaxation services during or after work hours.",nightlife:"A vibrant area known for nightlife, with relaxation options available nearby.",landmark:"A well-known area frequented by visitors and locals alike.",dining:"A popular dining and entertainment district with nearby relaxation services.",shopping:"A busy shopping area with convenient access to body rub and massage providers."},ie=()=>{const{citySlug:n,poiSlug:c}=M(),[N]=T(),d=Math.max(1,parseInt(N.get("page")||"1",10)),{data:t,isLoading:w}=E(n),{data:i,isLoading:P}=D(t?.id,c),{data:b,isLoading:$}=W(t?.id,d),{data:L}=q(t?.id),y=(b?.listings??[]).map(F),r=b?.totalCount??0,C=Math.max(1,Math.ceil(r/20)),o=t?`${t.name}${t.state?`, ${t.state}`:""}`:"",a=i?.name??I((c??"").replace(/-/g," ")),l=`/city/${n}/near/${c}`,k=Z("poiZone",r,l),m=i?.meta_title??`Body Rub Near ${a}, ${o} | RubPage`,x=i?.meta_description??`Find body rub & massage providers near ${a} in ${o}. Browse ${r} listings.`,p=[{label:"Home",href:"/"},{label:"Cities",href:"/cities"},{label:t?.name??"",href:`/city/${n}`},{label:`Near ${a}`}],f=(L??[]).filter(s=>s.slug!==c).slice(0,8),g=i?z[i.type]:void 0,A=_.useMemo(()=>[{"@type":"CollectionPage",name:m,description:x,url:`https://rubpage.com${l}`,breadcrumb:{"@type":"BreadcrumbList",itemListElement:p.map((s,B)=>({"@type":"ListItem",position:B+1,name:s.label,item:s.href?`https://rubpage.com${s.href}`:void 0}))}},{"@type":"FAQPage",mainEntity:[{"@type":"Question",name:`Where can I find body rub services near ${a}
1?`,acceptedAnswer:{"@type":"Answer",text:`RubPage lists ${r} providers near ${a} in ${o}. Browse listings with photos and contact details.`}},{"@type":"Question",name:`Are there outcall services available near ${a}?`,acceptedAnswer:{"@type":"Answer",text:`Many providers near ${a} offer outcall services. Check individual listings for availability.`}}]}],[m,x,l,p,a,o,r]);return w||P?e.jsx(h,{children:e.jsx("div",{className:"flex items-center justify-center py-32",children:e.jsx(v,{className:"w-8 h-8 animate-spin text-muted-foreground"})})}):t?e.jsxs(h,{children:[e.jsx(j,{title:m,description:x,canonical:l,jsonLd:A,noindex:!k.index}),e.jsx("section",{className:"pt-4 pb-2",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6",children:[e.jsx(O,{items:p}),e.jsxs("h1",{className:"text-xl md:text-2xl font-medium text-foreground mb-0.5",children:["Body Rub & Massage Near ",a,", ",o]}),e.jsxs("p",{className:"text-sm text-muted-foreground",children:[r>0?`${r} providers near this area`:"Explore providers near this location",d>1?` — Page ${d}`:""]})]})}),(g||i?.description)&&e.jsx("section",{className:"py-4 border-b border-border",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6",children:[e.jsx("h2",{className:"text-lg font-semibold text-foreground mb-2",children:"About This Area"}),i?.description&&e.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed max-w-3xl mb-2",children:i.description}),g&&e.jsx("p",{className:"text-sm text-muted-foreground leading-relaxed max-w-3xl",children:g})]})}),e.jsx("section",{className:"py-4",children:e.jsx("div",{className:"max-w-7xl mx-auto px-4 sm:px-6",children:$?e.jsx("div",{className:"flex items-center justify-center py-20",children:e.jsx(v,{className:"w-8 h-8 animate-spin text-muted-foreground"})}):y.length===0?e.jsxs("div",{className:"text-center py-20 text-muted-foreground",children:[e.jsxs("p",{children:["No listings near ",a," yet."]}),e.jsxs(u,{to:`/city/${n}`,className:"text-primary hover:underline mt-2 inline-block",children:["View all listings in ",t?.name??o," →"]})]}):e.jsxs(e.Fragment,{children:[e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 lg:grid-cols-4 xl:grid-cols-5 gap-4",children:y.map(s=>e.jsx(R,{listing:s},s.id))}),e.jsx(Q,{currentPage:d,totalPages:Math.min(C,50),baseUrl:l})]})})}),f.length>0&&e.jsx("section",{className:"py-8 border-t border-border",children:e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6",children:[e.jsxs("h2",{className:"text-lg font-semibold text-foreground mb-4",children:["Other Popular Areas in ",t?.name]}),e.jsx("div",{className:"grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 gap-2",children:f.map(s=>e.jsxs(u,{to:`/city/${n}/near/${s.slug}`,className:"group flex items-center gap-2 px-3 py-2.5 rounded-lg border border-border hover:border-primary/30 hover:bg-secondary/30 transition-colors",children:[e.jsx(S,{className:"w-3.5 h-3.5 text-muted-foreground flex-shrink-0"}),e.jsx("span",{className:"text-sm text-foreground group-hover:text-primary transition-colors truncate",children:s.name}),s.listing_count>0&&e.jsx("span",{className:"text-xs text-muted-foreground ml-auto",children:s.listing_count})]},s.slug))})]})})]}):e.jsxs(h,{children:[e.jsx(j,{title:"City Not Found | RubPage",noindex:!0}),e.jsxs("div",{className:"max-w-7xl mx-auto px-4 sm:px-6 py-20 text-center",children:[e.jsx("h1",{className:"text-2xl font-semibold text-foreground mb-2",children:"City Not Found"}),e.jsxs("p",{className:"text-muted-foreground mb-6",children:[`We couldn't find a city matching "`,n,'".']}),e.jsx(u,{to:"/cities",className:"text-primary hover:underline",children:"Browse all cities →"})]})]})};export{ie 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.