feat: Add Collector Home page#447
Conversation
✅ Deploy Preview for otel-ecosystem-explorer ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
Signed-off-by: justin212407 <charlesjustin2124@gmail.com>
| <Route | ||
| path="/java-agent/instrumentation" | ||
| element={<JavaInstrumentationListPage />} | ||
| /> |
There was a problem hiding this comment.
A handful of Java routes look removed by accident here: /java-agent/instrumentation/:version, /java-agent/instrumentation/:version/:name, /java-agent/configuration, /java-agent/releases (gated by JAVA_RELEASE_COMPARISON), and /java-agent/configuration/builder (gated by JAVA_CONFIG_BUILDER). The PR description only mentions collector routing, so probably collateral from the diff. Worth restoring before merge.
There was a problem hiding this comment.
Restored this, as you suggested. Thanks for the lookout this was a major issue that i missed out while working upon the issue.
| </Routes> | ||
| </Suspense> | ||
| </ErrorBoundary> | ||
| )} |
There was a problem hiding this comment.
Stray )} with no matching opening, looks like a leftover from removing the {isEnabled("JAVA_CONFIG_BUILDER") && ( block. Either drop this line or restore the gated block above it.
There was a problem hiding this comment.
I missed this out while resolving the merge conflicts. Fixed it.
| <Route path="/about" element={<AboutPage />} /> | ||
| <Route path="*" element={<NotFoundPage />} /> | ||
| </Routes> | ||
| </Suspense> |
There was a problem hiding this comment.
The matching </ErrorBoundary> was dropped here too. The boundary opened above is never closed, which is what's breaking the Netlify build.
There was a problem hiding this comment.
Yeah i think i missed out too while resolving the merge conflicts.
Signed-off-by: justin212407 <charlesjustin2124@gmail.com>
Signed-off-by: justin212407 <charlesjustin2124@gmail.com>
Signed-off-by: justin212407 <charlesjustin2124@gmail.com>
There was a problem hiding this comment.
Pull request overview
Adds a Collector landing page and splits the Collector component explorer into a dedicated route.
Changes:
- Introduces
CollectorExploreLandingwith stats, cards, CTA links, resources, loading, and error states. - Moves component browsing into
CollectorComponentsPagewith type/distribution query filters. - Updates routing so
/collectoris the landing page and/collector/components...serves explorer/detail routes.
Reviewed changes
Copilot reviewed 6 out of 6 changed files in this pull request and generated 5 comments.
Show a summary per file
| File | Description |
|---|---|
ecosystem-explorer/src/features/collector/components/collector-explore-landing.tsx |
Adds Collector landing UI and data loading. |
ecosystem-explorer/src/features/collector/components/collector-explore-landing.test.tsx |
Adds landing page tests. |
ecosystem-explorer/src/features/collector/collector-page.tsx |
Replaces explorer shell with Collector landing page shell. |
ecosystem-explorer/src/features/collector/collector-page.test.tsx |
Updates Collector page shell test. |
ecosystem-explorer/src/features/collector/collector-components-page.tsx |
Adds dedicated component explorer route/page. |
ecosystem-explorer/src/App.tsx |
Registers Collector landing, component explorer, and detail routes. |
Comments suppressed due to low confidence (1)
ecosystem-explorer/src/features/collector/collector-components-page.tsx:290
- These card links no longer match
CollectorDetailPage: the route passesversion/id, butcollector-detail-page.tsxstill readsdistribution/nameparams and the version from the query string. As a result, clicking any component opens the detail page with empty distribution/name and shows the error state instead of loading the component.
filteredComponents.map((comp) => (
<Link
key={comp.id}
to={`/collector/components/${currentVersion}/${comp.id}`}
| return ( | ||
| <BrowserRouter> | ||
| <div className="bg-background flex min-h-screen flex-col"> | ||
| <Header /> | ||
| <main className="flex-1 pt-16"> |
| async function loadCollectorLandingStats(): Promise<CollectorLandingStats> { | ||
| const [indexResponse, versionData] = await Promise.all([ | ||
| fetch("/data/collector/index.json"), | ||
| loadVersions(), | ||
| ]); | ||
|
|
||
| if (!indexResponse.ok) { | ||
| throw new Error(`Collector index request failed with ${indexResponse.status}.`); | ||
| } | ||
|
|
||
| const payload: unknown = await indexResponse.json(); | ||
| const components = readCollectorComponents(payload); |
| export function CollectorComponentsPage() { | ||
| const { version: urlVersion } = useParams<{ version: string }>(); |
| <CollectorPageInner /> | ||
| )} | ||
| </div> | ||
| <CollectorExploreLanding /> |
| }, [components, distributionFilter, searchQuery, typeFilter]); | ||
|
|
||
| const handleVersionChange = (val: string) => { | ||
| navigate(`/collector/components/${val}`); |
Summary:
This PR introduces a fully implemented OpenTelemetry Collector landing page and separates the Collector component explorer into its own dedicated route.
Changes:
Collector Landing Page
PageContainerBackButtonCollectorExploreLandingCollectorExploreLanding
Added a new landing component featuring:
/data/collector/index.jsonRouting Updates
Updated routing behavior so that:
/collector/collector/components/collector/components/:version/collector/components/:version/:idFilter Support
Added query parameter support for component filtering:
Screenshots:
Screencast.From.2026-05-11.23-46-47.mp4
Tests:
Verification:
Successfully ran: