import {useState} from 'react'; import type {ItineraryItem, PlannerStop} from '@o2o/shared'; import {useSite} from '@site/lib/site-context'; import {sectionItems, sectionName} from '@site/lib/derive'; import {Sheet} from './Sheet'; const FIRST = 4; function stopsOf(item: ItineraryItem): PlannerStop[] { return item.days?.[0]?.stops ?? item.stops ?? []; } export function Itinerary() { const payload = useSite(); const parsed = sectionItems(payload, 'itinerary'); const [tag, setTag] = useState(''); const [open, setOpen] = useState(null); const items = parsed.items; if (items.length === 0) return null; const tags = [...new Set(items.map((item) => item.duration).filter((d): d is string => Boolean(d)))]; const shown = items.filter((item) => !tag || item.duration === tag); const card = (item: ItineraryItem) => ( ); return ( <>

ITINERARY

{parsed.title || sectionName(payload, 'itinerary', '추천 일정')} {items.length}

{parsed.subtitle || '하루를 어떻게 쓸지 미리 짜 두었습니다.'}

{tags.length > 1 && (
{['', ...tags].map((t) => ( ))}
)} {shown.slice(0, FIRST).map(card)} {shown.length > FIRST && (
{shown.length - FIRST}개 더 보기 {shown.slice(FIRST).map(card)}
)}
setOpen(null)} label={open?.name ?? ''}> {open && ( <>

{open.name}

{[open.duration, open.audience].filter(Boolean).join(' · ')}

{open.why &&

{open.why}

} {(open.days?.length ? open.days : [{label: undefined, stops: open.stops}]).map((day, i) => (
{day.label &&

{day.label}

}
    {(day.stops ?? []).map((stop, j) => (
  • {stop.name} {(stop.note || stop.minutes) && ( {[stop.minutes && `${stop.minutes}분 머뭅니다`, stop.note].filter(Boolean).join(' · ')} )}
  • ))}
))} )}
); }