@@ -14,13 +14,6 @@ interface TodoChangeDisplayProps {
1414 newTodos : TodoItem [ ]
1515}
1616
17- interface TodoGroup {
18- todos : TodoItem [ ]
19- status : TodoStatus | null
20- keyPrefix : string
21- className ?: string
22- }
23-
2417function getTodoIcon ( status : TodoStatus | null ) {
2518 switch ( status ) {
2619 case "completed" :
@@ -32,83 +25,32 @@ function getTodoIcon(status: TodoStatus | null) {
3225 }
3326}
3427
35- function TodoList ( { todos, status, keyPrefix, className } : TodoGroup ) {
36- if ( todos . length === 0 ) return null
37-
38- return (
39- < ul className = "list-none space-y-1 my-1" >
40- { todos . map ( ( todo ) => {
41- const icon = getTodoIcon ( status )
42- return (
43- < li
44- key = { `${ keyPrefix } -${ todo . id || todo . content } ` }
45- className = { `flex flex-row gap-2 items-start ${ className || "" } ` } >
46- { icon }
47- < span > { todo . content } </ span >
48- </ li >
49- )
50- } ) }
51- </ ul >
52- )
53- }
54-
5528export function TodoChangeDisplay ( { previousTodos, newTodos } : TodoChangeDisplayProps ) {
5629 const isInitialState = previousTodos . length === 0
5730
5831 // Determine which todos to display
59- let todoGroups : TodoGroup [ ]
32+ let todosToDisplay : TodoItem [ ]
6033
6134 if ( isInitialState && newTodos . length > 0 ) {
62- // For initial state, show all todos grouped by status
63- todoGroups = [
64- {
65- todos : newTodos . filter ( ( todo ) => ! todo . status || todo . status === "pending" ) ,
66- status : null ,
67- keyPrefix : "pending" ,
68- } ,
69- {
70- todos : newTodos . filter ( ( todo ) => todo . status === "in_progress" ) ,
71- status : "in_progress" ,
72- keyPrefix : "in-progress" ,
73- className : "text-vscode-charts-yellow" ,
74- } ,
75- {
76- todos : newTodos . filter ( ( todo ) => todo . status === "completed" ) ,
77- status : "completed" ,
78- keyPrefix : "completed" ,
79- } ,
80- ]
35+ // For initial state, show all todos in their original order
36+ todosToDisplay = newTodos
8137 } else {
82- // For updates, only show changes
83- const completedTodos = newTodos . filter ( ( newTodo ) => {
84- if ( newTodo . status !== "completed" ) return false
85- const previousTodo = previousTodos . find ( ( p ) => p . id === newTodo . id || p . content === newTodo . content )
86- return ! previousTodo || previousTodo . status !== "completed"
38+ // For updates, only show changes (completed or started) in their original order
39+ todosToDisplay = newTodos . filter ( ( newTodo ) => {
40+ if ( newTodo . status === "completed" ) {
41+ const previousTodo = previousTodos . find ( ( p ) => p . id === newTodo . id || p . content === newTodo . content )
42+ return ! previousTodo || previousTodo . status !== "completed"
43+ }
44+ if ( newTodo . status === "in_progress" ) {
45+ const previousTodo = previousTodos . find ( ( p ) => p . id === newTodo . id || p . content === newTodo . content )
46+ return ! previousTodo || previousTodo . status !== "in_progress"
47+ }
48+ return false
8749 } )
88-
89- const startedTodos = newTodos . filter ( ( newTodo ) => {
90- if ( newTodo . status !== "in_progress" ) return false
91- const previousTodo = previousTodos . find ( ( p ) => p . id === newTodo . id || p . content === newTodo . content )
92- return ! previousTodo || previousTodo . status !== "in_progress"
93- } )
94-
95- todoGroups = [
96- {
97- todos : completedTodos ,
98- status : "completed" ,
99- keyPrefix : "completed" ,
100- } ,
101- {
102- todos : startedTodos ,
103- status : "in_progress" ,
104- keyPrefix : "started" ,
105- className : "text-vscode-charts-yellow" ,
106- } ,
107- ]
10850 }
10951
11052 // If no todos to display, don't render anything
111- if ( todoGroups . every ( ( group ) => group . todos . length === 0 ) ) {
53+ if ( todosToDisplay . length === 0 ) {
11254 return null
11355 }
11456
@@ -122,9 +64,22 @@ export function TodoChangeDisplay({ previousTodos, newTodos }: TodoChangeDisplay
12264 </ div >
12365
12466 < div className = "pl-1 pr-1 pt-1 font-light leading-normal" >
125- { todoGroups . map ( ( group , index ) => (
126- < TodoList key = { index } { ...group } />
127- ) ) }
67+ < ul className = "list-none space-y-1 my-1" >
68+ { todosToDisplay . map ( ( todo ) => {
69+ const status = ( todo . status || "pending" ) as TodoStatus
70+ const icon = getTodoIcon ( status )
71+ return (
72+ < li
73+ key = { todo . id || todo . content }
74+ className = { `flex flex-row gap-2 items-start ${
75+ status === "in_progress" ? "text-vscode-charts-yellow" : ""
76+ } `} >
77+ { icon }
78+ < span > { todo . content } </ span >
79+ </ li >
80+ )
81+ } ) }
82+ </ ul >
12883 </ div >
12984 </ div >
13085 )
0 commit comments