From e3d39c30376a24c76a88395ceb15c17ac7939e86 Mon Sep 17 00:00:00 2001 From: ThePrabhu Date: Sat, 30 May 2026 20:57:47 +0530 Subject: [PATCH] feat: add repository URL copy action in repo modal --- .../student/opensource/RepoDiscoveryPage.tsx | 54 +++++++++++++++---- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/client/src/module/student/opensource/RepoDiscoveryPage.tsx b/client/src/module/student/opensource/RepoDiscoveryPage.tsx index f32efbc2..5787c58e 100644 --- a/client/src/module/student/opensource/RepoDiscoveryPage.tsx +++ b/client/src/module/student/opensource/RepoDiscoveryPage.tsx @@ -8,6 +8,8 @@ import { GitFork, CircleDot, ExternalLink, + Copy, + Check, X, ChevronDown, TrendingUp, @@ -58,6 +60,7 @@ export default function RepoDiscoveryPage() { const [sortKey, setSortKey] = useState("stars"); const [showFilters, setShowFilters] = useState(false); const [selectedRepo, setSelectedRepo] = useState(null); + const [repoUrlCopied, setRepoUrlCopied] = useState(false); const [page, setPage] = useState(1); const [showSuggestModal, setShowSuggestModal] = useState(false); const { user } = useAuthStore(); @@ -101,6 +104,17 @@ export default function RepoDiscoveryPage() { setPage(1); }; + const copySelectedRepoUrl = () => { + if (!selectedRepo) return; + navigator.clipboard.writeText(selectedRepo.url); + setRepoUrlCopied(true); + setTimeout(() => setRepoUrlCopied(false), 1500); + }; + + useEffect(() => { + setRepoUrlCopied(false); + }, [selectedRepo]); + const activeFilters = (selectedDomain !== "ALL" ? 1 : 0) + (selectedDifficulty !== "ALL" ? 1 : 0); @@ -591,16 +605,36 @@ export default function RepoDiscoveryPage() { - {/* View on GitHub */} - - View on GitHub - - + {/* Repository actions */} +
+ + View on GitHub + + + +