Skip to content

Commit 1fac2cf

Browse files
committed
A bunch of tiny fixes
1 parent 4874e9c commit 1fac2cf

File tree

3 files changed

+304
-212
lines changed

3 files changed

+304
-212
lines changed

src/browser/components/home.tsx

Lines changed: 62 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import {
1111
GitMerge,
1212
ChevronDown,
1313
Eye,
14+
EyeOff,
15+
AtSign,
1416
User,
1517
Users,
1618
RefreshCw,
@@ -78,6 +80,7 @@ interface RepoFilter {
7880
name: string;
7981
mode: FilterMode;
8082
authoredBy?: string; // Username for "authored-by" filter mode
83+
enabled?: boolean; // Whether the filter is active (defaults to true)
8184
}
8285

8386
// Filter configuration stored in localStorage
@@ -160,7 +163,10 @@ function getModeFilter(mode: FilterMode, authoredBy?: string): string {
160163
// Build queries grouped by mode (GitHub doesn't support per-repo qualifiers with OR)
161164
// Multiple repo: qualifiers act as OR, but user filters apply to all repos
162165
function buildSearchQueries(config: FilterConfig): string[] {
163-
if (config.repos.length === 0) {
166+
// Filter out disabled repos (enabled defaults to true if not specified)
167+
const enabledRepos = config.repos.filter((r) => r.enabled !== false);
168+
169+
if (enabledRepos.length === 0) {
164170
return [];
165171
}
166172

@@ -174,8 +180,8 @@ function buildSearchQueries(config: FilterConfig): string[] {
174180
const queries: string[] = [];
175181

176182
// Separate "All Repos" filters from specific repo filters
177-
const allReposFilters = config.repos.filter(isAllReposFilter);
178-
const specificRepos = config.repos.filter((r) => !isAllReposFilter(r));
183+
const allReposFilters = enabledRepos.filter(isAllReposFilter);
184+
const specificRepos = enabledRepos.filter((r) => !isAllReposFilter(r));
179185

180186
// Handle "All Repos" global filters (one query per mode)
181187
for (const filter of allReposFilters) {
@@ -271,7 +277,7 @@ const MODE_OPTIONS = [
271277
{
272278
value: "review-requested",
273279
label: "Review Requests",
274-
icon: Eye,
280+
icon: AtSign,
275281
description: "PRs where you're requested as reviewer",
276282
},
277283
{
@@ -434,6 +440,15 @@ export function Home() {
434440
[]
435441
);
436442

443+
const handleToggleRepo = useCallback((repoName: string) => {
444+
setConfig((prev) => ({
445+
...prev,
446+
repos: prev.repos.map((r) =>
447+
r.name === repoName ? { ...r, enabled: r.enabled === false } : r
448+
),
449+
}));
450+
}, []);
451+
437452
const handleStateChange = useCallback((state: FilterConfig["state"]) => {
438453
setConfig((prev) => ({ ...prev, state }));
439454
}, []);
@@ -523,6 +538,7 @@ export function Home() {
523538
(m) => m.value === repo.mode
524539
)!;
525540
const isOpen = openRepoDropdown === repo.name;
541+
const isEnabled = repo.enabled !== false;
526542
// For "All Repos", exclude the "All PRs" mode since it would be too broad
527543
const availableModes = isAllRepos
528544
? MODE_OPTIONS.filter((m) => m.value !== "all")
@@ -561,21 +577,58 @@ export function Home() {
561577
isOpen
562578
? "bg-muted border-border"
563579
: isAllRepos
564-
? "bg-primary/10 border-primary/30 hover:bg-primary/20 hover:border-primary/50"
565-
: "bg-muted/50 border-transparent hover:bg-muted hover:border-border"
580+
? isEnabled
581+
? "bg-primary/10 border-primary/30 hover:bg-primary/20 hover:border-primary/50"
582+
: "bg-muted/30 border-border/50 opacity-50"
583+
: isEnabled
584+
? "bg-muted/50 border-transparent hover:bg-muted hover:border-border"
585+
: "bg-muted/30 border-border/50 opacity-50"
566586
)}
567587
>
588+
<button
589+
onClick={(e) => {
590+
e.stopPropagation();
591+
handleToggleRepo(repo.name);
592+
}}
593+
className={cn(
594+
"p-0.5 rounded transition-colors",
595+
isEnabled
596+
? "hover:bg-muted-foreground/20 text-muted-foreground hover:text-foreground"
597+
: "hover:bg-muted-foreground/20 text-muted-foreground/50 hover:text-foreground"
598+
)}
599+
title={isEnabled ? "Disable filter" : "Enable filter"}
600+
>
601+
{isEnabled ? (
602+
<Eye className="w-3 h-3" />
603+
) : (
604+
<EyeOff className="w-3 h-3" />
605+
)}
606+
</button>
568607
<modeOption.icon
569608
className={cn(
570609
"w-3 h-3",
571-
isAllRepos ? "text-primary" : "text-muted-foreground"
610+
isAllRepos
611+
? isEnabled
612+
? "text-primary"
613+
: "text-muted-foreground/50"
614+
: "text-muted-foreground"
572615
)}
573616
/>
574-
<span className={isAllRepos ? "font-medium" : "font-mono"}>
617+
<span
618+
className={cn(
619+
isAllRepos ? "font-medium" : "font-mono",
620+
!isEnabled && "line-through"
621+
)}
622+
>
575623
{isAllRepos ? modeOption.label : repo.name}
576624
</span>
577625
{repo.mode === "authored-by" && repo.authoredBy && (
578-
<span className="text-muted-foreground">
626+
<span
627+
className={cn(
628+
"text-muted-foreground",
629+
!isEnabled && "line-through"
630+
)}
631+
>
579632
@{repo.authoredBy}
580633
</span>
581634
)}

0 commit comments

Comments
 (0)