--- // 行事予定の一覧表。データは src/data/schedule/*.json から読む。 // セルの中身は HTML(リンクを含む)としてそのまま出力する。 import meetings from '@/data/schedule/meetings.json'; import events from '@/data/schedule/events.json'; import { entryDates, mainStartMonth } from '@/lib/schedule-dates'; type Row = { date: string; title: string; place: string; note: string; source: string }; type TableData = { columns: string[]; rows: Row[] }; const { variant, rows, scope = 'all', } = Astro.props as { variant: 'meeting' | 'event'; rows?: Row[]; scope?: 'all' | 'main' }; const base: TableData = (variant === 'meeting' ? meetings : events) as TableData; // rows を渡された場合はその行だけを表示する(月別・年度別アーカイブ用) let list = rows ?? base.rows; // scope="main" のときは、前月以降に開催される予定だけを表示する。 // 前々月以前の終了分はアーカイブに移し、メインページが年々肥大化しないようにする。 if (scope === 'main') { const start = `${mainStartMonth()}-01`; list = list.filter((row) => entryDates(variant, row.date, row.place).some((date) => date >= start), ); } const data: TableData = { columns: base.columns, rows: list }; ---
| {column} | )}||||
|---|---|---|---|---|