Skip to content

Commit f330642

Browse files
committed
Added the ability to delete a task
1 parent 3763bb3 commit f330642

File tree

5 files changed

+37
-1
lines changed

5 files changed

+37
-1
lines changed

src/InboxScreen.jsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ export default function InboxScreen({ error }) {
88
const archiveTask = (archive, id) => {
99
dispatch({ type: archive ? "ARCHIVE_TASK" : "INBOX_TASK", id });
1010
};
11+
const deleteTask = (id) => {
12+
dispatch({ type: "DELETE_TASK", id });
13+
};
1114

1215
const togglePinTask = (state, id) => {
1316
dispatch({
@@ -41,6 +44,7 @@ export default function InboxScreen({ error }) {
4144
onArchiveTask={archiveTask}
4245
onTogglePinTask={togglePinTask}
4346
onEditTitle={editTitle}
47+
onDeleteTask={deleteTask}
4448
/>
4549
</div>
4650
);

src/InboxScreen.stories.jsx

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,3 +91,22 @@ export const EditTask = {
9191
);
9292
},
9393
};
94+
95+
export const DeleteTask = {
96+
parameters: {
97+
...Default.parameters,
98+
},
99+
play: async ({ canvasElement }) => {
100+
const canvas = within(canvasElement);
101+
const getTask = (id) => canvas.findByRole("listitem", { name: id });
102+
103+
const itemToDelete = await getTask("task-1");
104+
const deleteButton = await findByRole(itemToDelete, "button", {
105+
name: "delete",
106+
});
107+
108+
// Click the pin button
109+
await userEvent.click(deleteButton);
110+
await expect(canvas.getAllByRole("listitem").length).toBe(5);
111+
},
112+
};

src/components/Task.jsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ export default function Task({
44
onArchiveTask,
55
onTogglePinTask,
66
onEditTitle,
7+
onDeleteTask,
78
}) {
89
return (
910
<div
@@ -41,7 +42,13 @@ export default function Task({
4142
onChange={(e) => onEditTitle(e.target.value, id)}
4243
/>
4344
</label>
44-
45+
<button
46+
aria-label="delete"
47+
className="delete-button"
48+
onClick={() => onDeleteTask(id)}
49+
>
50+
<span className="icon-trash" />
51+
</button>
4552
{state !== "TASK_ARCHIVED" && (
4653
<button
4754
className="pin-button"
@@ -73,4 +80,6 @@ Task.propTypes = {
7380
onTogglePinTask: PropTypes.func.isRequired,
7481
/** Event to change the task title */
7582
onEditTitle: PropTypes.func.isRequired,
83+
/** Event to delete the task */
84+
onDeleteTask: PropTypes.func.isRequired,
7685
};

src/components/Task.stories.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export default {
77
onArchiveTask: { action: "onArchiveTask" },
88
onTogglePinTask: { action: "onTogglePinTask" },
99
onEditTitle: { action: "onEditTitle" },
10+
onDeleteTask: { action: "onDeleteTask" },
1011
},
1112
};
1213

src/components/TaskList.jsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,13 @@ export default function TaskList({
66
onTogglePinTask,
77
onArchiveTask,
88
onEditTitle,
9+
onDeleteTask,
910
}) {
1011
const events = {
1112
onTogglePinTask,
1213
onArchiveTask,
1314
onEditTitle,
15+
onDeleteTask,
1416
};
1517

1618
const LoadingRow = (
@@ -69,6 +71,7 @@ TaskList.propTypes = {
6971
onTogglePinTask: PropTypes.func.isRequired,
7072
onArchiveTask: PropTypes.func.isRequired,
7173
onEditTitle: PropTypes.func.isRequired,
74+
onDeleteTask: PropTypes.func.isRequired,
7275
};
7376

7477
TaskList.defaultProps = {

0 commit comments

Comments
 (0)
close