feat: gtfs feature tracker + updated header / footer section#128
feat: gtfs feature tracker + updated header / footer section#128Alessandro100 merged 15 commits intomainfrom
Conversation
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <copilot@github.com>
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
This PR adds a new GTFS Feature Tracker page (fed by a published Google Sheets CSV) and exposes it through updated header/footer “Tools” navigation, plus a banner entry point from the Feeds search page when feature filters are active.
Changes:
- Add
/gtfs-feature-trackerlocalized route and client UI to display GTFS feature adoption across trip planners. - Update header/mobile drawer/footer navigation to include a “Tools” section and link to the new tracker.
- Show a banner button on the Feeds search page when feature filters are selected, linking to the tracker.
Reviewed changes
Copilot reviewed 12 out of 17 changed files in this pull request and generated 14 comments.
Show a summary per file
| File | Description |
|---|---|
| src/app/components/HeaderMobileDrawer.tsx | Adds “Tools” accordion in mobile drawer and includes tracker link. |
| src/app/components/Header.tsx | Reworks validators menu into a “Tools” popover with tracker entry. |
| src/app/components/Header.style.ts | Adds styles/components for the new header dropdown layout. |
| src/app/components/Footer.tsx | Renames “Validators” column to “Tools” and adds tracker link. |
| src/app/[locale]/gtfs-feature-tracker/page.tsx | New localized page that fetches and renders tracker data. |
| src/app/[locale]/gtfs-feature-tracker/lib/fetchTrackerData.ts | Fetches/parses CSV data and maps it into tracker view models. |
| src/app/[locale]/gtfs-feature-tracker/components/types.ts | Adds tracker-specific types for parsed data and tokenization. |
| src/app/[locale]/gtfs-feature-tracker/components/GtfsFeatureTracker.tsx | Main client UI: filtering, table rendering, and “Feeds” links. |
| src/app/[locale]/gtfs-feature-tracker/components/GtfsFeatureTracker.helpers.tsx | Helper functions for status parsing, progress calc, tokenization, date formatting. |
| src/app/[locale]/feeds/components/FeedsScreen.tsx | Adds banner button linking to tracker when features are selected. |
| public/assets/tripPlannerLogos/gmaps.png | Adds tracker consumer logo asset. |
| public/assets/tripPlannerLogos/transitapp.png | Adds tracker consumer logo asset. |
| public/assets/tripPlannerLogos/motis.png | Adds tracker consumer logo asset. |
| public/assets/tripPlannerLogos/opentripplanner.png | Adds tracker consumer logo asset. |
| messages/en.json | Adds footer/tooling strings and the feeds banner label. |
| messages/fr.json | Adds footer/tooling strings and the feeds banner label. |
| <Button | ||
| variant='text' | ||
| sx={mobileNavElementStyle} | ||
| href='/gtfs-feature-tracker' | ||
| onClick={onClose} | ||
| > | ||
| GTFS Feature Tracker | ||
| </Button> |
There was a problem hiding this comment.
@copilot apply changes based on this feedback
There was a problem hiding this comment.
Fixed in commit ed6003e. The GTFS Feature Tracker button in the mobile drawer now uses component={LocaleLink} where LocaleLink is the Link from src/i18n/navigation, ensuring locale-prefixed client-side navigation (e.g. /fr/gtfs-feature-tracker on French pages) instead of a full-page reload to the default locale.
| export function formatDate(dateStr: string): string { | ||
| if (!dateStr) return ''; | ||
| const d = new Date(dateStr); | ||
| if (isNaN(d.getTime())) return dateStr; | ||
| return d.toLocaleDateString('en-US', { | ||
| year: 'numeric', | ||
| month: 'short', | ||
| day: 'numeric', | ||
| }); |
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Agent-Logs-Url: https://github.com/MobilityData/mobilitydatabase-web/sessions/1cf1ffaf-3a8a-4ba1-80e6-4e5bab377495 Co-authored-by: Alessandro100 <18631060+Alessandro100@users.noreply.github.com>
|
|
Agent-Logs-Url: https://github.com/MobilityData/mobilitydatabase-web/sessions/1cf1ffaf-3a8a-4ba1-80e6-4e5bab377495 Co-authored-by: Alessandro100 <18631060+Alessandro100@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <copilot@github.com>
|
*Lighthouse ran on https://mobilitydatabase-glbwufve9-mobility-data.vercel.app/ * (Desktop)
*Lighthouse ran on https://mobilitydatabase-glbwufve9-mobility-data.vercel.app/feeds * (Desktop)
*Lighthouse ran on https://mobilitydatabase-glbwufve9-mobility-data.vercel.app/feeds/gtfs/mdb-2126 * (Desktop)
*Lighthouse ran on https://mobilitydatabase-glbwufve9-mobility-data.vercel.app/feeds/gtfs_rt/mdb-2585 * (Desktop)
*Lighthouse ran on https://mobilitydatabase-glbwufve9-mobility-data.vercel.app/feeds/gbfs/gbfs-flamingo_porirua * (Desktop)
|
Co-authored-by: Copilot <copilot@github.com>
Co-authored-by: Copilot <copilot@github.com>
|
[minor]: The informational link on the search page remains visible when the GTFS schedule is unselected from the filters. See attached video on how to reproduce it. Screen.Recording.2026-04-27.at.2.19.03.PM.mov |
Summary:
closes #127
Includes the GTFS Feature Tracker as well as a new header and footer section that has "Tools"
Expected behavior:
In the Feeds search page, when a user filters by "Feature" a button should display asking the user if they want to see the gtfs feature tracker.
The gtfs feature tracker page should include the same functionality as the demo provided in https://community.mobilitydata.org/gtfs-features
Bonus
Testing tips:
Navigate to the gtfs feature tracking page and assure that the data is correct
Important
Some features names in the CSV do not match the names in the mobility database features
the naming is very sensitive to getting the data from the api
Please make sure these boxes are checked before submitting your pull request - thanks!
yarn testto make sure you didn't break anything