Skip to content

Commit 8d7a54c

Browse files
author
Mike Nikles
committed
Add PATCH endpoint - update text.
1 parent ca681c2 commit 8d7a54c

File tree

3 files changed

+20
-5
lines changed

3 files changed

+20
-5
lines changed

src/lib/todo-item.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,8 +88,8 @@
8888
<button aria-label="Mark done/not done" class="toggle"></button>
8989
</form>
9090

91-
<form action="" method="" class="text">
92-
<input type="text" value="{todo.text}" />
91+
<form action="/todos/{todo.uid}.json?_method=patch" method="post" class="text">
92+
<input type="text" name="text" value="{todo.text}" />
9393
<button aria-label="Save todo" class="save"></button>
9494
</form>
9595

src/routes/todos/[uid].json.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,10 @@ import { api } from "./_api";
33

44
export const del: RequestHandler = (request) => {
55
return api(request);
6+
}
7+
8+
export const patch: RequestHandler<{}, FormData> = (request) => {
9+
return api(request, {
10+
text: request.body.get("text")
11+
});
612
}

src/routes/todos/_api.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { Request } from "@sveltejs/kit";
33
// TODO: Persist in database
44
let todos: Todo[] = [];
55

6-
export const api = (request: Request, todo?: Todo) => {
6+
export const api = (request: Request, data?: Record<string, unknown>) => {
77
let body = {};
88
let status = 500;
99

@@ -13,14 +13,23 @@ export const api = (request: Request, todo?: Todo) => {
1313
status = 200;
1414
break;
1515
case "POST":
16-
todos.push(todo);
17-
body = todo;
16+
todos.push(data as Todo);
17+
body = data;
1818
status = 201;
1919
break;
2020
case "DELETE":
2121
todos = todos.filter(todo => todo.uid !== request.params.uid)
2222
status = 200;
2323
break;
24+
case "PATCH":
25+
todos = todos.map(todo => {
26+
if (todo.uid === request.params.uid) {
27+
todo.text = data.text as string;
28+
}
29+
return todo;
30+
});
31+
status = 200;
32+
break;
2433

2534
default:
2635
break;

0 commit comments

Comments
 (0)