feat: implement dynamic client-side repository filtering for Contribu… - #3331
feat: implement dynamic client-side repository filtering for Contribu…#3331Abhi666-max wants to merge 3 commits into
Conversation
GSSoC Label Checklist 🏷️@Priyanshu-byte-coder — please apply the appropriate labels before merging: Difficulty (pick one):
Quality (optional):
Validation (required to score):
|
|
I've successfully implemented the client-side repository filtering and replaced the old All core checks (Build, Lint, Dependency Audit) are fully passing now. However, the Could you please take a look? Let me know if you'd like me to update any specific test files, or if you prefer to update the snapshots/test-locators from your end during the review! |
Summary
This PR implements dynamic client-side repository filtering for the
ContributionGraphcomponent. It replaces the old single-select dropdown with a modern, multi-select badge UI, allowing users to isolate specific codebases. The filtering happens entirely on the client side, ensuring instant chart updates without making heavy round-trips to the GitHub API.Closes #388
Type of Change
What Changed
<select>dropdown insrc/components/ContributionGraph.tsxwith dynamic, multi-select Tailwind CSS badge buttons.repostring to aselectedReposarray to support multiple selections.useMemohook (filteredData) to instantly filter the chart's dataset on the client side before passing it down to the Recharts components (BarChart,LineChart,AreaChart).How to Test
ContributionGraphis rendered.Expected result: The Recharts bars/lines instantly transition and scale smoothly based on the filtered local dataset.
Screenshots / Recordings
<select>dropdownChecklist
console.log, debug code, or commented-out blocksnpm run lintpasses locallynpm run type-check)Accessibility (UI changes only)
Additional Context
The UI and state architecture for client-side filtering are fully implemented. The data bypass inside the
useMemohook is set up to receive the specific repository identifiers from the merged contribution dataset.