From 1246c8382c8734dc705f96bf9fa6b5efdd3819bc Mon Sep 17 00:00:00 2001 From: yyamashita Date: Fri, 8 May 2026 08:38:32 +0900 Subject: Fix all TODO bugs and implement feature additions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - SCRAPE_TARGETS.md: add 5 missing venues (nine-spices, nishieifuku-jam, fever-shindaita, moon-step-nakano, mod-shibasaki) - Navigation: add 日付別 link to venues.tsx and events.$id.tsx headers - venues.tsx: add official site external links per venue card - ScrapeButton: new component with useFetcher-based trigger + 2s polling progress UI showing per-venue status and event count - venues.tsx / events._index.tsx: wire in ScrapeButton - FilterBar + db.server.ts: add area filter derived from venues, threaded through queryEvents Co-Authored-By: Claude Sonnet 4.6 --- app/routes/events.$id.tsx | 1 + app/routes/events._index.tsx | 14 ++++++++++---- app/routes/venues.tsx | 29 +++++++++++++++++++++++------ 3 files changed, 34 insertions(+), 10 deletions(-) (limited to 'app/routes') diff --git a/app/routes/events.$id.tsx b/app/routes/events.$id.tsx index 4a84308..423cda5 100644 --- a/app/routes/events.$id.tsx +++ b/app/routes/events.$id.tsx @@ -21,6 +21,7 @@ export default function EventDetail() { diff --git a/app/routes/events._index.tsx b/app/routes/events._index.tsx index cb1a019..890e0fd 100644 --- a/app/routes/events._index.tsx +++ b/app/routes/events._index.tsx @@ -4,6 +4,7 @@ import { queryEvents, getVenues, type CapacityRange } from "~/lib/db.server"; import EventCard from "~/components/EventCard"; import EventListRow from "~/components/EventListRow"; import FilterBar from "~/components/FilterBar"; +import ScrapeButton from "~/components/ScrapeButton"; function defaultWindow() { const today = new Date(); @@ -24,18 +25,20 @@ export async function loader({ request }: Route.LoaderArgs) { const venue_id = url.searchParams.get("venue_id") ?? undefined; const keyword = url.searchParams.get("keyword") ?? undefined; const capacity_range = (url.searchParams.get("capacity_range") ?? undefined) as CapacityRange | undefined; + const area = url.searchParams.get("area") ?? undefined; const page = Math.max(1, parseInt(url.searchParams.get("page") ?? "1", 10)); const limit = 30; const offset = (page - 1) * limit; - const events = queryEvents({ date_from, date_to, venue_id, keyword, capacity_range, limit, offset }); + const events = queryEvents({ date_from, date_to, venue_id, keyword, capacity_range, area, limit, offset }); const venues = getVenues(); + const areas = [...new Set(venues.filter((v) => v.area).map((v) => v.area as string))].sort(); - return { events, venues, page, hasMore: events.length === limit, date_from, date_to }; + return { events, venues, areas, page, hasMore: events.length === limit, date_from, date_to }; } export default function EventsIndex() { - const { events, venues, page, hasMore, date_from, date_to } = useLoaderData(); + const { events, venues, areas, page, hasMore, date_from, date_to } = useLoaderData(); const [searchParams, setSearchParams] = useSearchParams(); const view = (searchParams.get("view") ?? "card") as "card" | "list"; @@ -62,6 +65,8 @@ export default function EventsIndex() {

イベント一覧

+
+
+
- + {events.length === 0 ? (
diff --git a/app/routes/venues.tsx b/app/routes/venues.tsx index b027707..f2a7d54 100644 --- a/app/routes/venues.tsx +++ b/app/routes/venues.tsx @@ -1,6 +1,7 @@ import { useLoaderData, Link } from "react-router"; import type { Route } from "./+types/venues"; import { getVenues, getLastScrapePerVenue, type ScrapeLog } from "~/lib/db.server"; +import ScrapeButton from "~/components/ScrapeButton"; export async function loader(_: Route.LoaderArgs) { const venues = getVenues(); @@ -20,16 +21,20 @@ export default function Venues() {
-
-

会場一覧

-

- 現在 {venues.length} 会場が登録されています。 -

+
+
+

会場一覧

+

+ 現在 {venues.length} 会場が登録されています。 +

+
+
{venues.length === 0 ? ( @@ -51,7 +56,19 @@ export default function Venues() { > {v.name} - {v.area &&

{v.area}

} +
+ {v.area && {v.area}} + {v.url && ( + + 公式サイト ↗ + + )} +
{/* イベント件数 */} -- cgit v1.2.3