File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -32,6 +32,7 @@ type ItemProps = {
3232 item : Item ;
3333 onToggle ?: ( id : number ) => void ;
3434 onUpdate : ( item : Item ) => void ;
35+ onDelete : ( id : number ) => void ;
3536 availableTopics : Topic [ ] ;
3637} ;
3738
@@ -43,6 +44,7 @@ export function TaskItem({
4344 item,
4445 onToggle,
4546 onUpdate,
47+ onDelete,
4648 availableTopics,
4749} : ItemProps ) {
4850 {
@@ -210,6 +212,8 @@ export function TaskItem({
210212 ) }
211213 </ div >
212214
215+ { /* Edit Button */ }
216+
213217 < div className = "task-edit flex gap-2" >
214218 { isEditing ? (
215219 < div className = "flex w-full flex-row justify-center text-lg" >
@@ -233,6 +237,18 @@ export function TaskItem({
233237 </ button >
234238 ) }
235239 </ div >
240+
241+ { /* Delete Button */ }
242+ < div >
243+ { ! isEditing && (
244+ < button
245+ onClick = { ( ) => onDelete ( item . id ) }
246+ className = "mt-2 text-red-500"
247+ >
248+ Delete Task
249+ </ button >
250+ ) }
251+ </ div >
236252 </ div >
237253 ) ;
238254}
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 ) {
@@ -51,6 +53,7 @@ export function TaskList({
5153 item = { item }
5254 onToggle = { onToggleTask }
5355 onUpdate = { onUpdate }
56+ onDelete = { onDelete }
5457 availableTopics = { availableTopics }
5558 />
5659 </ li >
Original file line number Diff line number Diff line change @@ -103,6 +103,25 @@ export default function TasksPage() {
103103 setItems ( ( prev ) => prev . map ( ( t ) => ( t . id === updated . id ? updated : t ) ) ) ;
104104 }
105105
106+ async function handleTaskDeleted ( id : number ) {
107+ if ( ! window . confirm ( "Delete this task?" ) ) return ;
108+
109+ try {
110+ const response = await fetch (
111+ `http://localhost:8000/api/planner/tasks/${ id } /` ,
112+ { method : "DELETE" } ,
113+ ) ;
114+
115+ if ( ! response . ok ) {
116+ throw new Error ( "Failed to delete task" ) ;
117+ }
118+
119+ setItems ( ( prev ) => prev . filter ( ( item ) => item . id !== id ) ) ;
120+ } catch ( error ) {
121+ console . error ( "Error deleting task:" , error ) ;
122+ }
123+ }
124+
106125 return (
107126 < div className = "content-container min-w-screen flex h-[85vh] flex-row items-center justify-center bg-slate-950 p-3" >
108127 < div className = "task-list-border h-full w-full rounded-lg bg-slate-900 p-3" >
@@ -122,6 +141,7 @@ export default function TasksPage() {
122141 items = { items }
123142 onToggleTask = { handleToggleTask }
124143 onUpdate = { handleTaskUpdated }
144+ onDelete = { handleTaskDeleted }
125145 availableTopics = { availableTopics }
126146 />
127147 </ div >
You can’t perform that action at this time.
0 commit comments