You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
2.7 KiB
93 lines
2.7 KiB
import KanbanAPI from "../api/KanbanAPI.js";
|
|
import DropZone from "./DropZone.js";
|
|
import Item from "./Item.js";
|
|
import Dialog from "./Dialog.js";
|
|
|
|
export default class Column {
|
|
constructor(id, title) {
|
|
this.id = Number(id);
|
|
this.collapsed = false;
|
|
|
|
this.elements = {};
|
|
this.elements.root = Column.createRoot();
|
|
this.elements.title =
|
|
this.elements.root.querySelector(
|
|
".kanban__column-title"
|
|
);
|
|
this.elements.items =
|
|
this.elements.root.querySelector(
|
|
".kanban__column-items"
|
|
);
|
|
this.elements.addItem =
|
|
this.elements.root.querySelector(
|
|
".kanban__add-item"
|
|
);
|
|
this.elements.hideItem =
|
|
this.elements.root.querySelector(
|
|
".kanban__hide-item"
|
|
);
|
|
|
|
this.elements.root.dataset.id = String(this.id);
|
|
this.elements.title.textContent = title;
|
|
|
|
this.elements.items.appendChild(
|
|
DropZone.createDropZone()
|
|
);
|
|
|
|
this.elements.addItem.addEventListener("click", () => {
|
|
Dialog.new_task(this.id);
|
|
});
|
|
|
|
this.elements.hideItem.addEventListener("click", () => {
|
|
this.collapsed = !this.collapsed;
|
|
this.elements.items.hidden = this.collapsed;
|
|
|
|
this.elements.hideItem.setAttribute(
|
|
"aria-expanded",
|
|
String(!this.collapsed)
|
|
);
|
|
});
|
|
|
|
KanbanAPI.getItems(this.id).forEach(item => {
|
|
this.renderItem(item);
|
|
});
|
|
}
|
|
|
|
renderItem(data) {
|
|
const item = new Item(data);
|
|
this.elements.items.appendChild(item.elements.root);
|
|
}
|
|
|
|
static createRoot() {
|
|
const template = document.createElement("template");
|
|
|
|
template.innerHTML = `
|
|
<div class="kanban__column">
|
|
<button
|
|
class="kanban__add-item"
|
|
type="button"
|
|
title="Add task"
|
|
aria-label="Add task"
|
|
>
|
|
<i aria-hidden="true" style="color: blue">✚</i>
|
|
</button>
|
|
|
|
<span class="kanban__column-title"></span>
|
|
|
|
<button
|
|
class="kanban__hide-item"
|
|
type="button"
|
|
title="Show or hide column"
|
|
aria-label="Show or hide column"
|
|
aria-expanded="true"
|
|
>
|
|
<i aria-hidden="true" style="color: black;">✘</i>
|
|
</button>
|
|
|
|
<div class="kanban__column-items"></div>
|
|
</div>
|
|
`;
|
|
|
|
return template.content.firstElementChild;
|
|
}
|
|
}
|
|
|