Refactor task progress to unified useTaskProgress hook

Replace WebSocket-only useTaskWebSocket with useTaskProgress that
provides a unified task state interface. TaskIndicator no longer
manages its own polling or auth — it receives task state from the
parent via props. Rename wsTasks prop to tasks throughout.
This commit is contained in:
Viktor Barzin 2026-02-09 23:02:24 +00:00
parent 3616e678ac
commit 2d86213db5
No known key found for this signature in database
GPG key ID: 0EB088298288D958
6 changed files with 130 additions and 363 deletions

View file

@ -11,28 +11,29 @@ import { TaskIndicator } from './TaskIndicator';
interface HeaderProps {
user: AuthUser;
activeFilterCount?: number;
taskID?: string | null;
isLoading?: boolean;
onToggleFilters?: () => void;
showFilterToggle?: boolean;
onTaskCancelled?: () => void;
// Task progress (unified)
tasks: Record<string, TaskState>;
activeTaskId: string | null;
isConnected: boolean;
onCancelTask: (taskId: string) => Promise<boolean>;
onClearAllTasks: () => Promise<boolean>;
onTaskCompleted?: () => void;
wsTasks?: Record<string, TaskState>;
wsConnected?: boolean;
wsSubscribe?: (taskId: string) => void;
}
export function Header({
user,
activeFilterCount = 0,
taskID,
onToggleFilters,
showFilterToggle = false,
onTaskCancelled,
tasks,
activeTaskId,
isConnected,
onCancelTask,
onClearAllTasks,
onTaskCompleted,
wsTasks,
wsConnected,
wsSubscribe,
}: HeaderProps) {
const handleLogout = async () => {
if (user.provider === 'passkey') {
@ -58,11 +59,12 @@ export function Header({
{/* Task Indicator */}
<TaskIndicator
taskID={taskID ?? null}
onTaskCancelled={onTaskCancelled}
tasks={tasks}
activeTaskId={activeTaskId}
isConnected={isConnected}
onCancelTask={onCancelTask}
onClearAllTasks={onClearAllTasks}
onTaskCompleted={onTaskCompleted}
wsTasks={wsTasks}
wsConnected={wsConnected}
/>
{/* Filter Toggle (mobile) */}