mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-01 08:13:37 +00:00
- Added new RadioGroup and Switch components for better UI interaction. - Introduced BranchSelector for improved branch selection in feature dialogs. - Updated Autocomplete and BranchAutocomplete components to handle error states. - Refactored feature management to archive verified features instead of deleting them. - Enhanced worktree handling by removing worktreePath from features, relying on branchName instead. - Improved auto mode functionality by integrating branch management and worktree updates. - Cleaned up unused code and optimized existing logic for better performance.
96 lines
3.0 KiB
TypeScript
96 lines
3.0 KiB
TypeScript
"use client";
|
|
|
|
import { Button } from "@/components/ui/button";
|
|
import { HotkeyButton } from "@/components/ui/hotkey-button";
|
|
import { Slider } from "@/components/ui/slider";
|
|
import { Switch } from "@/components/ui/switch";
|
|
import { Label } from "@/components/ui/label";
|
|
import { Plus, Users } from "lucide-react";
|
|
import { KeyboardShortcut } from "@/hooks/use-keyboard-shortcuts";
|
|
|
|
interface BoardHeaderProps {
|
|
projectName: string;
|
|
maxConcurrency: number;
|
|
onConcurrencyChange: (value: number) => void;
|
|
isAutoModeRunning: boolean;
|
|
onAutoModeToggle: (enabled: boolean) => void;
|
|
onAddFeature: () => void;
|
|
addFeatureShortcut: KeyboardShortcut;
|
|
isMounted: boolean;
|
|
}
|
|
|
|
export function BoardHeader({
|
|
projectName,
|
|
maxConcurrency,
|
|
onConcurrencyChange,
|
|
isAutoModeRunning,
|
|
onAutoModeToggle,
|
|
onAddFeature,
|
|
addFeatureShortcut,
|
|
isMounted,
|
|
}: BoardHeaderProps) {
|
|
return (
|
|
<div className="flex items-center justify-between p-4 border-b border-border bg-glass backdrop-blur-md">
|
|
<div>
|
|
<h1 className="text-xl font-bold">Kanban Board</h1>
|
|
<p className="text-sm text-muted-foreground">{projectName}</p>
|
|
</div>
|
|
<div className="flex gap-2 items-center">
|
|
{/* Concurrency Slider - only show after mount to prevent hydration issues */}
|
|
{isMounted && (
|
|
<div
|
|
className="flex items-center gap-2 px-3 py-1.5 rounded-lg bg-secondary border border-border"
|
|
data-testid="concurrency-slider-container"
|
|
>
|
|
<Users className="w-4 h-4 text-muted-foreground" />
|
|
<Slider
|
|
value={[maxConcurrency]}
|
|
onValueChange={(value) => onConcurrencyChange(value[0])}
|
|
min={1}
|
|
max={10}
|
|
step={1}
|
|
className="w-20"
|
|
data-testid="concurrency-slider"
|
|
/>
|
|
<span
|
|
className="text-sm text-muted-foreground min-w-[2ch] text-center"
|
|
data-testid="concurrency-value"
|
|
>
|
|
{maxConcurrency}
|
|
</span>
|
|
</div>
|
|
)}
|
|
|
|
{/* Auto Mode Toggle - only show after mount to prevent hydration issues */}
|
|
{isMounted && (
|
|
<div className="flex items-center gap-2 px-3 py-1.5 rounded-lg bg-secondary border border-border">
|
|
<Label
|
|
htmlFor="auto-mode-toggle"
|
|
className="text-sm font-medium cursor-pointer"
|
|
>
|
|
Auto Mode
|
|
</Label>
|
|
<Switch
|
|
id="auto-mode-toggle"
|
|
checked={isAutoModeRunning}
|
|
onCheckedChange={onAutoModeToggle}
|
|
data-testid="auto-mode-toggle"
|
|
/>
|
|
</div>
|
|
)}
|
|
|
|
<HotkeyButton
|
|
size="sm"
|
|
onClick={onAddFeature}
|
|
hotkey={addFeatureShortcut}
|
|
hotkeyActive={false}
|
|
data-testid="add-feature-button"
|
|
>
|
|
<Plus className="w-4 h-4 mr-2" />
|
|
Add Feature
|
|
</HotkeyButton>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|