-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathSideBarList.js
More file actions
63 lines (48 loc) · 1.33 KB
/
SideBarList.js
File metadata and controls
63 lines (48 loc) · 1.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import SideBarItem from "./SideBarItem.js";
import { request } from "../../api/api.js";
import { push } from "../../utils/router.js";
export default function SideBarList({ $target, initialState }) {
const $sideBarList = document.createElement("div");
this.state = initialState;
this.setState = (nextState) => {
this.state = nextState;
this.render();
};
this.render = () => {
if (!this.state) return;
$sideBarList.innerHTML = `
<ul class="sidebar-list-ul">
${this.state.map((item) => SideBarItem(item)).join("")}
</ul>
`;
$target.appendChild($sideBarList);
};
this.render();
$sideBarList.addEventListener("click", async (e) => {
const $item = e.target;
const { id } = $item.parentElement.dataset;
if ($item.className === "item-load") {
push(`/documents/${id}`);
return;
}
if ($item.className === "item-remove") {
await request(`/documents/${id}`, {
method: "delete",
});
push(`/`);
return;
}
if ($item.className === "item-add") {
const tempPost = {
title: "",
parent: id,
};
const createdPost = await request("/documents", {
method: "post",
body: JSON.stringify(tempPost),
});
// this.setState()
push(`/documents/${createdPost.id}`);
}
});
}