File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -30,6 +30,7 @@ type ItemProps = {
3030 item : Item ;
3131 onToggle ?: ( id : number ) => void ;
3232 onUpdate : ( item : Item ) => void ;
33+ onDelete : ( id : number ) => void ;
3334 availableTopics : Topic [ ] ;
3435} ;
3536
@@ -41,6 +42,7 @@ export function TaskItem({
4142 item,
4243 onToggle,
4344 onUpdate,
45+ onDelete,
4446 availableTopics,
4547} : ItemProps ) {
4648 {
@@ -210,6 +212,8 @@ export function TaskItem({
210212 </ span >
211213 ) }
212214 </ div >
215+
216+ { /* Edit Button */ }
213217 < div className = "mt-2 flex gap-2" >
214218 { isEditing ? (
215219 < >
@@ -222,6 +226,18 @@ export function TaskItem({
222226 < button onClick = { startEdit } > Edit</ button >
223227 ) }
224228 </ div >
229+
230+ { /* Delete Button */ }
231+ < div >
232+ { ! isEditing && (
233+ < button
234+ onClick = { ( ) => onDelete ( item . id ) }
235+ className = "mt-2 text-red-500"
236+ >
237+ Delete Task
238+ </ button >
239+ ) }
240+ </ div >
225241 </ div >
226242 ) ;
227243}
Original file line number Diff line number Diff line change @@ -27,13 +27,15 @@ type ListProps = {
2727 items : Item [ ] ;
2828 onToggleTask ?: ( id : number ) => void ;
2929 onUpdate : ( item : Item ) => void ;
30+ onDelete : ( id : number ) => void ;
3031 availableTopics : Topic [ ] ;
3132} ;
3233
3334export function TaskList ( {
3435 items,
3536 onToggleTask,
3637 onUpdate,
38+ onDelete,
3739 availableTopics,
3840} : ListProps ) {
3941 if ( items . length === 0 ) {
@@ -52,6 +54,7 @@ export function TaskList({
5254 item = { item }
5355 onToggle = { onToggleTask }
5456 onUpdate = { onUpdate }
57+ onDelete = { onDelete }
5558 availableTopics = { availableTopics }
5659 />
5760 </ li >
Original file line number Diff line number Diff line change @@ -126,6 +126,25 @@ export default function TasksPage() {
126126 setItems ( ( prev ) => prev . map ( ( t ) => ( t . id === updated . id ? updated : t ) ) ) ;
127127 }
128128
129+ async function handleTaskDeleted ( id : number ) {
130+ if ( ! window . confirm ( "Delete this task?" ) ) return ;
131+
132+ try {
133+ const response = await fetch (
134+ `http://localhost:8000/api/planner/tasks/${ id } /` ,
135+ { method : "DELETE" } ,
136+ ) ;
137+
138+ if ( ! response . ok ) {
139+ throw new Error ( "Failed to delete task" ) ;
140+ }
141+
142+ setItems ( ( prev ) => prev . filter ( ( item ) => item . id !== id ) ) ;
143+ } catch ( error ) {
144+ console . error ( "Error deleting task:" , error ) ;
145+ }
146+ }
147+
129148 return (
130149 < div className = "container mx-auto flex flex-row items-center justify-center p-4" >
131150 < div className = "m-4 h-fit w-fit rounded-xl bg-zinc-700 p-4 text-center" >
@@ -134,6 +153,7 @@ export default function TasksPage() {
134153 items = { items }
135154 onToggleTask = { handleToggleTask }
136155 onUpdate = { handleTaskUpdated }
156+ onDelete = { handleTaskDeleted }
137157 availableTopics = { availableTopics }
138158 />
139159 </ div >
You can’t perform that action at this time.
0 commit comments