Skip to content

Commit e1b6239

Browse files
chore(web): Change carousel and repository list links to link to file tree (#528)
1 parent 5073c7d commit e1b6239

File tree

4 files changed

+41
-40
lines changed

4 files changed

+41
-40
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1313
### Changed
1414
- Improved repository query performance by adding db indices. [#526](https://github.com/sourcebot-dev/sourcebot/pull/526)
1515
- Improved repository query performance by removing JOIN on `Connection` table. [#527](https://github.com/sourcebot-dev/sourcebot/pull/527)
16+
- Changed repo carousel and repo list links to redirect to the file browser. [#528](https://github.com/sourcebot-dev/sourcebot/pull/528)
1617

1718
## [4.7.1] - 2025-09-19
1819

packages/web/src/app/[domain]/components/homepage/repositoryCarousel.tsx

Lines changed: 14 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@ import Image from "next/image";
1111
import { FileIcon } from "@radix-ui/react-icons";
1212
import clsx from "clsx";
1313
import { RepositoryQuery } from "@/lib/types";
14+
import { getBrowsePath } from "../../browse/hooks/useBrowseNavigation";
15+
import Link from "next/link";
16+
import { useDomain } from "@/hooks/useDomain";
1417

1518
interface RepositoryCarouselProps {
1619
repos: RepositoryQuery[];
@@ -56,7 +59,8 @@ interface RepositoryBadgeProps {
5659
const RepositoryBadge = ({
5760
repo
5861
}: RepositoryBadgeProps) => {
59-
const { repoIcon, displayName, repoLink } = (() => {
62+
const domain = useDomain();
63+
const { repoIcon, displayName } = (() => {
6064
const info = getCodeHostInfoForRepo({
6165
codeHostType: repo.codeHostType,
6266
name: repo.repoName,
@@ -72,32 +76,30 @@ const RepositoryBadge = ({
7276
className={`w-4 h-4 ${info.iconClassName}`}
7377
/>,
7478
displayName: info.displayName,
75-
repoLink: info.repoLink,
7679
}
7780
}
7881

7982
return {
8083
repoIcon: <FileIcon className="w-4 h-4" />,
8184
displayName: repo.repoName,
82-
repoLink: undefined,
8385
}
8486
})();
8587

8688
return (
87-
<div
88-
onClick={() => {
89-
if (repoLink !== undefined) {
90-
window.open(repoLink, "_blank");
91-
}
92-
}}
93-
className={clsx("flex flex-row items-center gap-2 border rounded-md p-2 text-clip", {
94-
"cursor-pointer": repoLink !== undefined,
89+
<Link
90+
href={getBrowsePath({
91+
repoName: repo.repoName,
92+
path: '/',
93+
pathType: 'tree',
94+
domain
9595
})}
96+
97+
className={clsx("flex flex-row items-center gap-2 border rounded-md p-2 text-clip")}
9698
>
9799
{repoIcon}
98100
<span className="text-sm font-mono">
99101
{displayName}
100102
</span>
101-
</div>
103+
</Link>
102104
)
103105
}

packages/web/src/app/[domain]/repos/columns.tsx

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,22 @@
22

33
import { Button } from "@/components/ui/button"
44
import type { ColumnDef } from "@tanstack/react-table"
5-
import { ArrowUpDown, ExternalLink, Clock, Loader2, CheckCircle2, XCircle, Trash2, Check, ListFilter } from "lucide-react"
5+
import { ArrowUpDown, Clock, Loader2, CheckCircle2, XCircle, Trash2, Check, ListFilter } from "lucide-react"
66
import Image from "next/image"
77
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
88
import { cn, getRepoImageSrc } from "@/lib/utils"
99
import { RepoIndexingStatus } from "@sourcebot/db";
1010
import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu"
11+
import Link from "next/link"
12+
import { getBrowsePath } from "../browse/hooks/useBrowseNavigation"
1113

1214
export type RepositoryColumnInfo = {
1315
repoId: number
14-
name: string
16+
repoName: string;
17+
repoDisplayName: string
1518
imageUrl?: string
1619
repoIndexingStatus: RepoIndexingStatus
1720
lastIndexed: string
18-
url: string
1921
}
2022

2123
const statusLabels = {
@@ -90,42 +92,38 @@ const StatusIndicator = ({ status }: { status: RepoIndexingStatus }) => {
9092

9193
export const columns = (domain: string): ColumnDef<RepositoryColumnInfo>[] => [
9294
{
93-
accessorKey: "name",
95+
accessorKey: "repoDisplayName",
9496
header: 'Repository',
95-
cell: ({ row }) => {
96-
const repo = row.original
97-
const url = repo.url
98-
const isRemoteRepo = url.length > 0
99-
97+
cell: ({ row: { original: { repoId, repoName, repoDisplayName, imageUrl } } }) => {
10098
return (
10199
<div className="flex flex-row items-center gap-3 py-2">
102100
<div className="relative h-8 w-8 overflow-hidden rounded-md border bg-muted">
103-
{repo.imageUrl ? (
101+
{imageUrl ? (
104102
<Image
105-
src={getRepoImageSrc(repo.imageUrl, repo.repoId, domain) || "/placeholder.svg"}
106-
alt={`${repo.name} logo`}
103+
src={getRepoImageSrc(imageUrl, repoId, domain) || "/placeholder.svg"}
104+
alt={`${repoDisplayName} logo`}
107105
width={32}
108106
height={32}
109107
className="object-cover"
110108
/>
111109
) : (
112110
<div className="flex h-full w-full items-center justify-center bg-muted text-xs font-medium uppercase text-muted-foreground">
113-
{repo.name.charAt(0)}
111+
{repoDisplayName.charAt(0)}
114112
</div>
115113
)}
116114
</div>
117115
<div className="flex items-center gap-2">
118-
<span
119-
className={isRemoteRepo ? "font-medium text-primary hover:underline cursor-pointer" : "font-medium"}
120-
onClick={() => {
121-
if (isRemoteRepo) {
122-
window.open(url, "_blank")
123-
}
124-
}}
116+
<Link
117+
className={"font-medium text-primary hover:underline cursor-pointer"}
118+
href={getBrowsePath({
119+
repoName: repoName,
120+
path: '/',
121+
pathType: 'tree',
122+
domain
123+
})}
125124
>
126-
{repo.name.length > 40 ? `${repo.name.slice(0, 40)}...` : repo.name}
127-
</span>
128-
{isRemoteRepo && <ExternalLink className="h-3.5 w-3.5 text-muted-foreground" />}
125+
{repoDisplayName.length > 40 ? `${repoDisplayName.slice(0, 40)}...` : repoDisplayName}
126+
</Link>
129127
</div>
130128
</div>
131129
)

packages/web/src/app/[domain]/repos/repositoryTable.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,21 @@ export const RepositoryTable = ({
3737
const tableRepos = useMemo(() => {
3838
if (reposLoading) return Array(4).fill(null).map(() => ({
3939
repoId: 0,
40-
name: "",
40+
repoName: "",
41+
repoDisplayName: "",
4142
repoIndexingStatus: RepoIndexingStatus.NEW,
4243
lastIndexed: "",
43-
url: "",
4444
imageUrl: "",
4545
}));
4646

4747
if (!repos) return [];
4848
return repos.map((repo): RepositoryColumnInfo => ({
4949
repoId: repo.repoId,
50-
name: repo.repoDisplayName ?? repo.repoName,
50+
repoName: repo.repoName,
51+
repoDisplayName: repo.repoDisplayName ?? repo.repoName,
5152
imageUrl: repo.imageUrl,
5253
repoIndexingStatus: repo.repoIndexingStatus as RepoIndexingStatus,
5354
lastIndexed: repo.indexedAt?.toISOString() ?? "",
54-
url: repo.webUrl ?? repo.repoCloneUrl,
5555
})).sort((a, b) => {
5656
const getPriorityFromStatus = (status: RepoIndexingStatus) => {
5757
switch (status) {
@@ -119,7 +119,7 @@ export const RepositoryTable = ({
119119
<DataTable
120120
columns={tableColumns}
121121
data={tableRepos}
122-
searchKey="name"
122+
searchKey="repoDisplayName"
123123
searchPlaceholder="Search repositories..."
124124
headerActions={isAddReposButtonVisible && (
125125
<Button

0 commit comments

Comments
 (0)