// retoor <retoor@molodetz.nl>
import { Http } from "./Http.js";
import { Poller } from "./Poller.js";
export class WorkspaceManager {
constructor(root) {
this.root = root;
this.slug = root.dataset.slug;
this.poller = null;
this.bind();
this.subscribe();
}
static mount() {
const root = document.querySelector("[data-workspace-root]");
return root ? new WorkspaceManager(root) : null;
}
bind() {
this.root.addEventListener("submit", (event) => {
const form = event.target.closest("form");
if (!form || form.dataset.confirm) return;
event.preventDefault();
this.send(form);
});
}
async send(form) {
try {
await Http.sendForm(form);
await this.refresh();
} catch (error) {
window.app?.toast?.show(error.message || "Action failed", { type: "error" });
}
}
subscribe() {
const uid = this.root.dataset.workspaceUid;
if (uid && window.app?.pubsub) {
window.app.pubsub.subscribe(`workspace.${uid}.detail`, () => this.render());
}
this.poller = new Poller(() => this.refresh(), 20000);
this.poller.start();
}
async refresh() {
try {
const data = await Http.getJson(`/projects/${this.slug}/workspace`);
this.render(data);
} catch (error) {
return;
}
}
render(data) {
if (!data || !data.workspace) return;
const state = this.root.querySelector("[data-workspace-status]");
if (state) state.textContent = data.workspace.status || "";
}
}
export default WorkspaceManager;