import {ArrowUpRight, CalendarCheck, Phone} from 'lucide-react'; import {useSite} from '@/lib/site-context'; import {bookingLinks, bookingRows, channelLabel, sectionName} from '@/lib/derive'; /** * 예약 안내. * * ★ 무엇을 근거로 그리나 * 1) `payload.links` 중 예약을 실제로 받는 확정 채널(야놀자·여기어때·네이버 플레이스). * 2) 예약 관련 확인 fact(예약 필수 / 예약 방법) — 음식점·관광체험 스키마에 있다. * 3) `place.phone` — 국내 소규모 사업장에서 전화는 여전히 1순위 예약 창구다. * * ★ 예약 링크를 지어내지 않는다 * 관리자 캔버스는 채널 URL 이 안 흘러와서 상호 검색으로 떨어뜨리지만(`bookingHref`), * 발행본에는 확정된 채널 URL 이 실려 온다. 그러니 여기서는 검색으로 떨어뜨리지 않는다 — * "예약하기"를 눌렀는데 검색 결과가 뜨면 손님은 예약을 포기한다. * 근거가 하나도 없으면 섹션째 그리지 않는다. */ export function BookingSection() { const payload = useSite(); const links = bookingLinks(payload); const rows = bookingRows(payload); const phone = payload.place.phone; if (links.length === 0 && rows.length === 0 && !phone) return null; return (

Booking

{sectionName(payload, 'booking', '예약 안내')}

{payload.place.name} 예약은 아래 경로로 받습니다.

{rows.length > 0 && (
{rows.map((row) => (
{row.label}
{row.value}
))}
)}
{phone && ( 전화 예약 {phone} )} {/* 확정된 채널만 나간다 — 확정 전 URL 은 동명 업소의 예약 페이지일 수 있다. */} {links.map((link) => ( {channelLabel(link)} ))}
); }