import {useState} from 'react'; import {MapPin, MessageCircle, Phone} from 'lucide-react'; import {PlaceCategory} from '@o2o/shared'; import {useSite} from '@site/lib/site-context'; import {bookingActionLabel, bookingLinks, channelLabel, stayBookingView} from '@site/lib/derive'; import {Modal} from '@site/lib/ui'; import {StayBookingDemo} from './StayBookingDemo'; /** * 좁은 화면 하단 고정 바. * * ★ 예전에는 '홈 · 객실 · 주변 · 위치' 탭이었다. 그런데 이 사이트는 한 장짜리라 * 탭이 하는 일은 앵커 이동뿐이고, 그건 상단 메뉴가 이미 한다 — 같은 일을 두 번 하면서 * **가장 많이 눌리는 것(전화·예약)이 갈 자리를 먹고 있었다.** * 국내 숙박·공간 사이트가 하단에 고정으로 두는 건 예외 없이 연락·예약이다. * ★ 근거 없는 버튼은 안 만든다. 전화번호가 없으면 전화 칸이 없고, 확정 채널이 없으면 * 예약 칸이 없다. 하나도 없으면 바 자체를 그리지 않는다 — 빈 띠가 화면만 먹는다. * ★ 아이폰 홈 인디케이터를 피한다(.safe-b). */ export function MobileTabBar() { const payload = useSite(); const phone = payload.place.phone; const links = bookingLinks(payload); const booking = links[0]; const kakao = payload.links.find((link) => link.confirmed && /kakao/i.test(link.url)); const stayBooking = payload.place.category === PlaceCategory.LODGING ? stayBookingView(payload) : null; const [bookingOpen, setBookingOpen] = useState(false); if (!phone && !booking && !kakao) return null; return ( <> {stayBooking && ( setBookingOpen(false)} label="예약 요청" title="예약 요청" wide> )} ); }