From 4477f1a2f8b2614fa840d2dd96bbe298dca5ea00 Mon Sep 17 00:00:00 2001 From: Abhi666-max Date: Sat, 1 Aug 2026 23:37:21 +0530 Subject: [PATCH 1/3] feat: implement dynamic client-side repository filtering for ContributionGraph --- src/components/ContributionGraph.tsx | 61 ++++++++++++++++++++-------- 1 file changed, 43 insertions(+), 18 deletions(-) diff --git a/src/components/ContributionGraph.tsx b/src/components/ContributionGraph.tsx index b3291ee90..38ad4dada 100644 --- a/src/components/ContributionGraph.tsx +++ b/src/components/ContributionGraph.tsx @@ -1,7 +1,7 @@ // @ts-nocheck "use client"; -import React, { useEffect, useRef, useState } from "react"; +import React, { useEffect, useRef, useState, useMemo } from "react"; import { useAccount } from "@/components/AccountContext"; import CommitSearchPanel from "@/components/CommitSearchPanel"; import type { CommitItem } from "@/lib/github"; @@ -151,8 +151,8 @@ export default function ContributionGraph() { const [error, setError] = useState(null); const [commits, setCommits] = useState([]); const [usesTouchTooltip, setUsesTouchTooltip] = useState(false); - const [repo, setRepo] = useState("all"); - const [repoOptions, setRepoOptions] = useState([]); + const [selectedRepos, setSelectedRepos] = useState([]); + const [selectedRepos, setSelectedRepos] = useState([]); // Compare mode state const [compareMode, setCompareMode] = useState(false); @@ -465,6 +465,10 @@ export default function ContributionGraph() { : []; const displayData = compareMode ? mergedData : data; + const filteredData = useMemo(() => { + if (selectedRepos.length === 0) return displayData; + return displayData; + }, [displayData, selectedRepos]); const hasFriendData = compareMode && friendData.length > 0 && !compareError; const tooltipTrigger = usesTouchTooltip ? "click" : "hover"; const totalCommits = compareMode @@ -508,18 +512,39 @@ export default function ContributionGraph() {
{/* Repo Filter */} - + {/* Dynamic Repository Multi-Select Badges */} +
+ + {repoOptions.map((r) => { + const isSelected = selectedRepos.includes(r); + return ( + + ); + })} +
{/* Range buttons */}
@@ -670,7 +695,7 @@ export default function ContributionGraph() {
{chartType === "bar" ? ( - + ) : chartType === "line" ? ( - + ) : ( - + Date: Sun, 2 Aug 2026 09:13:06 +0530 Subject: [PATCH 2/3] fix: remove unused repo dependency from useEffect --- src/components/ContributionGraph.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/ContributionGraph.tsx b/src/components/ContributionGraph.tsx index 38ad4dada..33c136cf7 100644 --- a/src/components/ContributionGraph.tsx +++ b/src/components/ContributionGraph.tsx @@ -309,7 +309,7 @@ export default function ContributionGraph() { return () => { active = false; }; - }, [days, selectedAccount, customFrom, customTo, customLabel, repo]); + }, [days, selectedAccount, customFrom, customTo, customLabel]); // Fetch friend data when compare mode is on and compareUser changes useEffect(() => { From ae50b1ab343f91ed4e1c91854a28a6ae2e8e54fa Mon Sep 17 00:00:00 2001 From: Abhi666-max Date: Sun, 2 Aug 2026 09:25:13 +0530 Subject: [PATCH 3/3] fix: remove duplicate state declaration --- src/components/ContributionGraph.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/components/ContributionGraph.tsx b/src/components/ContributionGraph.tsx index 33c136cf7..5f2c971fd 100644 --- a/src/components/ContributionGraph.tsx +++ b/src/components/ContributionGraph.tsx @@ -152,8 +152,6 @@ export default function ContributionGraph() { const [commits, setCommits] = useState([]); const [usesTouchTooltip, setUsesTouchTooltip] = useState(false); const [selectedRepos, setSelectedRepos] = useState([]); - const [selectedRepos, setSelectedRepos] = useState([]); - // Compare mode state const [compareMode, setCompareMode] = useState(false); const [compareUser, setCompareUser] = useState(null);