Skip to content

Commit 3b81d92

Browse files
committed
Editing & deleting
1 parent 3c3d342 commit 3b81d92

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

src/App.js

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,19 @@ function App() {
2929
setData({ ...data });
3030
}
3131

32+
function removeResource(resourceName, id) {
33+
let rest = data[resourceName].filter(resource => resource.id !== id);
34+
data[resourceName] = [...rest];
35+
setData({ ...data });
36+
}
37+
3238
let storeContextValue = {
3339
data,
3440
fetched,
3541
updateCollection,
3642
addToCollection,
37-
replaceResource
43+
replaceResource,
44+
removeResource
3845
};
3946

4047
return (

src/hooks/resources.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export function useCreate(resourceName) {
2929
return new Promise((resolve, reject) => {
3030
fetch(`/api/${resourceName}s`, {
3131
method: "POST",
32-
body: JSON.stringify({ resource })
32+
body: JSON.stringify({ [resourceName]: resource })
3333
})
3434
.then(response => response.json())
3535
.then(json => {
@@ -46,7 +46,7 @@ export function useCreate(resourceName) {
4646

4747
export function useResource(resourceName, id) {
4848
let [isSaving, setIsSaving] = useState(false);
49-
let { data, replaceResource } = useContext(StoreContext);
49+
let { data, replaceResource, removeResource } = useContext(StoreContext);
5050

5151
let resource = data[resourceName].find(resource => resource.id === id);
5252

@@ -68,5 +68,13 @@ export function useResource(resourceName, id) {
6868
});
6969
}
7070

71-
return [resource, { save, isSaving }];
71+
function destroy() {
72+
return fetch(`/api/${resourceName}s/${id}`, {
73+
method: "DELETE"
74+
}).then(() => {
75+
removeResource(resourceName, id);
76+
});
77+
}
78+
79+
return [resource, { save, isSaving, destroy }];
7280
}

src/pages/admin.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -121,11 +121,10 @@ function TodoList({ todos, updateTodos, removeTodo }) {
121121

122122
function Todo({ todo: seedTodo, didSave, didDelete }) {
123123
let [isEditing, setIsEditing] = useState(false);
124-
// let [isSaving, setIsSaving] = useState(false);
125124
let [localTodo, setLocalTodo] = useState({ ...seedTodo });
126125
let [isChecked, setIsChecked] = useState(false);
127126

128-
let [todo, { save, isSaving }] = useResource("todo", seedTodo.id);
127+
let [todo, { save, isSaving, destroy }] = useResource("todo", seedTodo.id);
129128

130129
function handleCheckboxChange(event) {
131130
setIsChecked(event.target.checked);
@@ -134,16 +133,12 @@ function Todo({ todo: seedTodo, didSave, didDelete }) {
134133
useEffect(() => {
135134
if (isChecked) {
136135
let id = setTimeout(() => {
137-
fetch(`/api/todos/${todo.id}`, {
138-
method: "DELETE"
139-
}).then(() => {
140-
didDelete(todo);
141-
});
136+
destroy();
142137
}, 1000);
143138

144139
return () => clearTimeout(id);
145140
}
146-
}, [isChecked, todo, didDelete]);
141+
}, [isChecked, destroy]);
147142

148143
function handleCheckboxClick(event) {
149144
event.stopPropagation();

0 commit comments

Comments
 (0)