diff --git a/apps/web/src/components/issue/issues-list.tsx b/apps/web/src/components/issue/issues-list.tsx index ab131808..e6d70f98 100644 --- a/apps/web/src/components/issue/issues-list.tsx +++ b/apps/web/src/components/issue/issues-list.tsx @@ -115,6 +115,7 @@ export function IssuesList({ const { openChat } = useGlobalChat(); const [countAdjustments, setCountAdjustments] = useState({ open: 0, closed: 0 }); + const filtersTriggerRef = useRef(null); useEffect(() => { setCountAdjustments({ open: 0, closed: 0 }); @@ -416,8 +417,8 @@ export function IssuesList({ {/* Toolbar */}
{/* Row 1: Search + Sort + Filter + New Issue */} -
-
+
+
- - -
+
- {filtersOpen && ( -
- {/* Activity */} -
- - Activity +
+ + + {filtersOpen && ( +
+ {/* Activity */} +
+ + Activity + +
+ {( [ - "quiet", - "Quiet", - ], - ] as [ - ActivityFilter, - string, - ][] - ).map( - ([ - value, - label, - ]) => ( - - ), - )} + } + onClick={() => + setActivityFilter( + value, + ) + } + className={cn( + "px-2.5 py-1 text-[10px] font-mono rounded-sm transition-colors cursor-pointer", + activityFilter === + value + ? "bg-foreground/8 text-foreground" + : "text-muted-foreground/60 hover:text-foreground hover:bg-muted/50 dark:hover:bg-white/4", + )} + > + { + label + } + + ), + )} +
-
-
+
- {/* Assignee */} -
- - Assignee - -
- {( - [ - [ - "all", - "All", - ], - [ - "assigned", - "Assigned", - ], + {/* Assignee */} +
+ + Assignee + +
+ {( [ - "unassigned", - "Unassigned", - ], - ] as [ - AssigneeFilter, - string, - ][] - ).map( - ([ - value, - label, - ]) => ( - - ), - )} + } + onClick={() => + setAssigneeFilter( + value, + ) + } + className={cn( + "px-2.5 py-1 text-[10px] font-mono rounded-sm transition-colors cursor-pointer", + assigneeFilter === + value + ? "bg-foreground/8 text-foreground" + : "text-muted-foreground/60 hover:text-foreground hover:bg-muted/50 dark:hover:bg-white/4", + )} + > + { + label + } + + ), + )} +
-
-
+
- {/* Author */} -
- - Author - -
- {selectedAuthor && - selectedAuthorData ? ( - - ) : ( -
- { + {/* Author */} +
+ + Author + +
+ {selectedAuthor && + selectedAuthorData ? ( + + ) : ( +
+ { + setAuthorSearch( + e + .target + .value, + ); + setAuthorDropdownOpen( + true, + ); + }} + onFocus={() => + setAuthorDropdownOpen( + true, + ) + } + className="w-full bg-transparent border-b border-border/40 px-1 py-1 text-[10px] font-mono placeholder:text-muted-foreground focus:outline-none focus:border-foreground/20 transition-colors" + /> + {authorDropdownOpen && + filteredAuthors.length > + 0 && ( +
+ {filteredAuthors.map( + ( + author, + ) => ( + - ), - )} -
- )} -
- )} + + ), + )} +
+ )} +
+ )} +
-
- {/* Labels */} - {labels.length > 0 && ( - <> -
-
- - Label - -
- {labels.map( - ( - label, - ) => ( - - ), - )} + } + + ), + )} +
-
- - )} + + )} - {/* Milestone */} - {milestones.length > 0 && ( - <> -
-
- - Milestone - -
- {milestones.map( - ( - ms, - ) => ( - - ), - )} + } + + ), + )} +
-
- - )} + + )} - {/* Clear all */} - {activeFilterCount > 0 && ( - <> -
- - - )} -
- )} -
+ {/* Clear all */} + {activeFilterCount > 0 && ( + <> +
+ + + )} +
+ )} +
- {activeFilterCount > 0 && ( - - )} + {activeFilterCount > 0 && ( + + )} -
- - +
+ + +