From 7c5860ce57a334b7ab4a501de78f1a7f41c8cdcc Mon Sep 17 00:00:00 2001 From: yyamashita Date: Tue, 19 May 2026 22:32:14 +0900 Subject: Add venue visibility toggles with localStorage persistence Each venue on /venues can be toggled on/off; state persists in localStorage. Hidden venues are filtered out of the event list, with a notice linking back to the venues page to manage the setting. Co-Authored-By: Claude Sonnet 4.6 --- app/routes/venues.tsx | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'app/routes/venues.tsx') diff --git a/app/routes/venues.tsx b/app/routes/venues.tsx index f2a7d54..9b8093a 100644 --- a/app/routes/venues.tsx +++ b/app/routes/venues.tsx @@ -2,6 +2,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"; +import { useVenueFilter } from "~/lib/venue-filter"; export async function loader(_: Route.LoaderArgs) { const venues = getVenues(); @@ -12,6 +13,8 @@ export async function loader(_: Route.LoaderArgs) { export default function Venues() { const { venues, scrapeStatus } = useLoaderData(); const statusMap = new Map(scrapeStatus.map((s) => [s.venue_id, s])); + const { hiddenIds, toggle } = useVenueFilter(); + const hiddenCount = hiddenIds.size; return (
@@ -32,6 +35,9 @@ export default function Venues() {

会場一覧

現在 {venues.length} 会場が登録されています。 + {hiddenCount > 0 && ( + {hiddenCount} 会場が非表示 + )}

@@ -43,10 +49,15 @@ export default function Venues() {
{venues.map((v) => { const log = statusMap.get(v.id); + const hidden = hiddenIds.has(v.id); return (