Merge pull request #225 from illia1f/fix/project-picker-dropdown

fix: project picker dropdown highlights first item instead of current project
This commit is contained in:
Web Dev Cody
2025-12-22 21:22:35 -05:00
committed by GitHub
2 changed files with 23 additions and 10 deletions

View File

@@ -69,6 +69,7 @@ export function ProjectSelectorWithOptions({
filteredProjects, filteredProjects,
} = useProjectPicker({ } = useProjectPicker({
projects, projects,
currentProject,
isProjectPickerOpen, isProjectPickerOpen,
setIsProjectPickerOpen, setIsProjectPickerOpen,
setCurrentProject, setCurrentProject,

View File

@@ -3,6 +3,7 @@ import type { Project } from '@/lib/electron';
interface UseProjectPickerProps { interface UseProjectPickerProps {
projects: Project[]; projects: Project[];
currentProject: Project | null;
isProjectPickerOpen: boolean; isProjectPickerOpen: boolean;
setIsProjectPickerOpen: (value: boolean | ((prev: boolean) => boolean)) => void; setIsProjectPickerOpen: (value: boolean | ((prev: boolean) => boolean)) => void;
setCurrentProject: (project: Project) => void; setCurrentProject: (project: Project) => void;
@@ -10,6 +11,7 @@ interface UseProjectPickerProps {
export function useProjectPicker({ export function useProjectPicker({
projects, projects,
currentProject,
isProjectPickerOpen, isProjectPickerOpen,
setIsProjectPickerOpen, setIsProjectPickerOpen,
setCurrentProject, setCurrentProject,
@@ -27,22 +29,32 @@ export function useProjectPicker({
return projects.filter((project) => project.name.toLowerCase().includes(query)); return projects.filter((project) => project.name.toLowerCase().includes(query));
}, [projects, projectSearchQuery]); }, [projects, projectSearchQuery]);
// Reset selection when filtered results change // Reset selection when filtered results change and project picker is open
useEffect(() => { useEffect(() => {
setSelectedProjectIndex(0); if (!isProjectPickerOpen) {
}, [filteredProjects.length, projectSearchQuery]); return;
}
// Reset search query when dropdown closes if (!projectSearchQuery.trim()) {
const currentIndex = currentProject
? filteredProjects.findIndex((p) => p.id === currentProject.id)
: -1;
if (currentIndex !== -1) {
setSelectedProjectIndex(currentIndex);
return;
}
}
setSelectedProjectIndex(0);
}, [isProjectPickerOpen, filteredProjects.length, projectSearchQuery, currentProject]);
// Reset search query when dropdown closes, set to current project index when it opens
useEffect(() => { useEffect(() => {
if (!isProjectPickerOpen) { if (!isProjectPickerOpen) {
setProjectSearchQuery(''); setProjectSearchQuery('');
setSelectedProjectIndex(0); setSelectedProjectIndex(0);
} } else {
}, [isProjectPickerOpen]); // Focus the search input when dropdown opens
// Focus the search input when dropdown opens
useEffect(() => {
if (isProjectPickerOpen) {
// Small delay to ensure the dropdown is rendered // Small delay to ensure the dropdown is rendered
setTimeout(() => { setTimeout(() => {
projectSearchInputRef.current?.focus(); projectSearchInputRef.current?.focus();