diff --git a/webview-ui/src/components/chat/TodoChangeDisplay.tsx b/webview-ui/src/components/chat/TodoChangeDisplay.tsx index 0525bf64ee..3904cd9c9f 100644 --- a/webview-ui/src/components/chat/TodoChangeDisplay.tsx +++ b/webview-ui/src/components/chat/TodoChangeDisplay.tsx @@ -14,13 +14,6 @@ interface TodoChangeDisplayProps { newTodos: TodoItem[] } -interface TodoGroup { - todos: TodoItem[] - status: TodoStatus | null - keyPrefix: string - className?: string -} - function getTodoIcon(status: TodoStatus | null) { switch (status) { case "completed": @@ -32,83 +25,32 @@ function getTodoIcon(status: TodoStatus | null) { } } -function TodoList({ todos, status, keyPrefix, className }: TodoGroup) { - if (todos.length === 0) return null - - return ( - - ) -} - export function TodoChangeDisplay({ previousTodos, newTodos }: TodoChangeDisplayProps) { const isInitialState = previousTodos.length === 0 // Determine which todos to display - let todoGroups: TodoGroup[] + let todosToDisplay: TodoItem[] if (isInitialState && newTodos.length > 0) { - // For initial state, show all todos grouped by status - todoGroups = [ - { - todos: newTodos.filter((todo) => !todo.status || todo.status === "pending"), - status: null, - keyPrefix: "pending", - }, - { - todos: newTodos.filter((todo) => todo.status === "in_progress"), - status: "in_progress", - keyPrefix: "in-progress", - className: "text-vscode-charts-yellow", - }, - { - todos: newTodos.filter((todo) => todo.status === "completed"), - status: "completed", - keyPrefix: "completed", - }, - ] + // For initial state, show all todos in their original order + todosToDisplay = newTodos } else { - // For updates, only show changes - const completedTodos = newTodos.filter((newTodo) => { - if (newTodo.status !== "completed") return false - const previousTodo = previousTodos.find((p) => p.id === newTodo.id || p.content === newTodo.content) - return !previousTodo || previousTodo.status !== "completed" + // For updates, only show changes (completed or started) in their original order + todosToDisplay = newTodos.filter((newTodo) => { + if (newTodo.status === "completed") { + const previousTodo = previousTodos.find((p) => p.id === newTodo.id || p.content === newTodo.content) + return !previousTodo || previousTodo.status !== "completed" + } + if (newTodo.status === "in_progress") { + const previousTodo = previousTodos.find((p) => p.id === newTodo.id || p.content === newTodo.content) + return !previousTodo || previousTodo.status !== "in_progress" + } + return false }) - - const startedTodos = newTodos.filter((newTodo) => { - if (newTodo.status !== "in_progress") return false - const previousTodo = previousTodos.find((p) => p.id === newTodo.id || p.content === newTodo.content) - return !previousTodo || previousTodo.status !== "in_progress" - }) - - todoGroups = [ - { - todos: completedTodos, - status: "completed", - keyPrefix: "completed", - }, - { - todos: startedTodos, - status: "in_progress", - keyPrefix: "started", - className: "text-vscode-charts-yellow", - }, - ] } // If no todos to display, don't render anything - if (todoGroups.every((group) => group.todos.length === 0)) { + if (todosToDisplay.length === 0) { return null } @@ -122,9 +64,22 @@ export function TodoChangeDisplay({ previousTodos, newTodos }: TodoChangeDisplay
- {todoGroups.map((group, index) => ( - - ))} +
)