@@ -37,16 +37,16 @@ type TasksTableProps = {
3737 tasks : readonly Task [ ] | undefined ;
3838 error : unknown ;
3939 onRetry : ( ) => void ;
40- checkedTasks ?: readonly Task [ ] ;
41- onCheckChange ?: ( checkedTasks : readonly Task [ ] ) => void ;
40+ checkedTaskIds ?: Set < string > ;
41+ onCheckChange ?: ( checkedTaskIds : Set < string > ) => void ;
4242 canCheckTasks ?: boolean ;
4343} ;
4444
4545export const TasksTable : FC < TasksTableProps > = ( {
4646 tasks,
4747 error,
4848 onRetry,
49- checkedTasks = [ ] ,
49+ checkedTaskIds = new Set ( ) ,
5050 onCheckChange,
5151 canCheckTasks = false ,
5252} ) => {
@@ -60,19 +60,21 @@ export const TasksTable: FC<TasksTableProps> = ({
6060 body = < TasksEmpty /> ;
6161 } else {
6262 body = tasks . map ( ( task ) => {
63- const checked = checkedTasks . some ( ( t ) => t . id === task . id ) ;
63+ const checked = checkedTaskIds . has ( task . id ) ;
6464 return (
6565 < TaskRow
6666 key = { task . id }
6767 task = { task }
6868 checked = { checked }
69- onCheckChange = { ( task , checked ) => {
69+ onCheckChange = { ( taskId , checked ) => {
7070 if ( ! onCheckChange ) return ;
71+ const newIds = new Set ( checkedTaskIds ) ;
7172 if ( checked ) {
72- onCheckChange ( [ ... checkedTasks , task ] ) ;
73+ newIds . add ( taskId ) ;
7374 } else {
74- onCheckChange ( checkedTasks . filter ( ( t ) => t . id !== task . id ) ) ;
75+ newIds . delete ( taskId ) ;
7576 }
77+ onCheckChange ( newIds ) ;
7678 } }
7779 canCheck = { canCheckTasks }
7880 />
@@ -93,7 +95,7 @@ export const TasksTable: FC<TasksTableProps> = ({
9395 checked = {
9496 tasks &&
9597 tasks . length > 0 &&
96- checkedTasks . length === tasks . length
98+ checkedTaskIds . size === tasks . length
9799 }
98100 size = "xsmall"
99101 onChange = { ( _ , checked ) => {
@@ -102,9 +104,9 @@ export const TasksTable: FC<TasksTableProps> = ({
102104 }
103105
104106 if ( ! checked ) {
105- onCheckChange ( [ ] ) ;
107+ onCheckChange ( new Set ( ) ) ;
106108 } else {
107- onCheckChange ( tasks ) ;
109+ onCheckChange ( new Set ( tasks . map ( ( t ) => t . id ) ) ) ;
108110 }
109111 } }
110112 aria-label = "Select all tasks"
@@ -173,7 +175,7 @@ const TasksEmpty: FC = () => {
173175type TaskRowProps = {
174176 task : Task ;
175177 checked : boolean ;
176- onCheckChange : ( task : Task , checked : boolean ) => void ;
178+ onCheckChange : ( taskId : string , checked : boolean ) => void ;
177179 canCheck : boolean ;
178180} ;
179181
@@ -212,7 +214,7 @@ const TaskRow: FC<TaskRowProps> = ({
212214 e . stopPropagation ( ) ;
213215 } }
214216 onChange = { ( e ) => {
215- onCheckChange ( task , e . currentTarget . checked ) ;
217+ onCheckChange ( task . id , e . currentTarget . checked ) ;
216218 } }
217219 aria-label = { `Select task ${ task . initial_prompt } ` }
218220 />
0 commit comments