diff --git a/src/renderer/App.tsx b/src/renderer/App.tsx index 41754166..3a41100c 100644 --- a/src/renderer/App.tsx +++ b/src/renderer/App.tsx @@ -2139,6 +2139,11 @@ const AppContent: React.FC = () => { onToggleEditor={() => setShowEditorMode(!showEditorMode)} showEditorButton={Boolean(activeTask)} isEditorOpen={showEditorMode} + projects={projects} + selectedProject={selectedProject} + activeTask={activeTask} + onSelectProject={handleSelectProject} + onSelectTask={handleSelectTask} /> )}
= ({ path, align = 'right' }) => { type="button" variant="ghost" size="sm" - className="h-8 gap-1 px-2 text-muted-foreground hover:bg-background/80" + className={[ + 'h-7 gap-1.5 px-2 text-[13px] font-medium leading-none text-muted-foreground hover:bg-background/70 hover:text-foreground', + open ? 'bg-background/80 text-foreground' : '', + ].join(' ')} onClick={async () => { const newState = !open; void import('../../lib/telemetryClient').then(({ captureTelemetry }) => { @@ -141,7 +144,9 @@ const OpenInMenu: React.FC = ({ path, align = 'right' }) => { > Open in diff --git a/src/renderer/components/titlebar/Titlebar.tsx b/src/renderer/components/titlebar/Titlebar.tsx index d3a28d6c..f7fb33ff 100644 --- a/src/renderer/components/titlebar/Titlebar.tsx +++ b/src/renderer/components/titlebar/Titlebar.tsx @@ -14,6 +14,8 @@ import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../ui/ import OpenInMenu from './OpenInMenu'; import FeedbackModal from '../FeedbackModal'; import BrowserToggleButton from './BrowserToggleButton'; +import TitlebarContext from './TitlebarContext'; +import type { Project, Task } from '../../types/app'; interface GithubUser { login?: string; @@ -38,6 +40,11 @@ interface TitlebarProps { onToggleEditor?: () => void; showEditorButton?: boolean; isEditorOpen?: boolean; + projects: Project[]; + selectedProject: Project | null; + activeTask: Task | null; + onSelectProject: (project: Project) => void; + onSelectTask: (task: Task) => void; } const Titlebar: React.FC = ({ @@ -56,6 +63,11 @@ const Titlebar: React.FC = ({ onToggleEditor, showEditorButton = false, isEditorOpen = false, + projects, + selectedProject, + activeTask, + onSelectProject, + onSelectTask, }) => { const [isFeedbackOpen, setIsFeedbackOpen] = useState(false); const feedbackButtonRef = useRef(null); @@ -115,6 +127,17 @@ const Titlebar: React.FC = ({ return ( <>
+
+
+ +
+
{currentPath ? : null} {showEditorButton ? ( diff --git a/src/renderer/components/titlebar/TitlebarContext.tsx b/src/renderer/components/titlebar/TitlebarContext.tsx new file mode 100644 index 00000000..8da7374e --- /dev/null +++ b/src/renderer/components/titlebar/TitlebarContext.tsx @@ -0,0 +1,108 @@ +import React from 'react'; +import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '../ui/select'; +import type { Project, Task } from '../../types/app'; + +interface TitlebarContextProps { + projects: Project[]; + selectedProject: Project | null; + activeTask: Task | null; + onSelectProject: (project: Project) => void; + onSelectTask: (task: Task) => void; +} + +const TitlebarContext: React.FC = ({ + projects, + selectedProject, + activeTask, + onSelectProject, + onSelectTask, +}) => { + if (!selectedProject) { + return
; + } + + const tasks = selectedProject?.tasks ?? []; + const projectValue = selectedProject.id; + const taskValue = activeTask?.id; + const projectLabel = selectedProject.name; + const taskLabel = activeTask?.name ?? ''; + const selectContentClassName = 'w-[min(280px,90vw)]'; + + const handleProjectChange = (value: string) => { + const nextProject = projects.find((project) => project.id === value); + if (nextProject) { + onSelectProject(nextProject); + } + }; + + const handleTaskChange = (value: string) => { + const nextTask = tasks.find((task) => task.id === value); + if (nextTask) { + onSelectTask(nextTask); + } + }; + + return ( +
+
+ +
+ / +
+ +
+
+ ); +}; + +export default TitlebarContext;