import { Form } from "./form";
declare let ajaxyFormsSettings;
class AjaxyTermPostsManager {
termsEl: HTMLSelectElement | null;
postsEl: HTMLSelectElement | null;
loadingMessage: any;
noPostsMessage: any;
defaultMessage: any;
dataSettings: any;
form: Form;
constructor(form, container) {
let dataSettings = JSON.parse(container.getAttribute("data-term-posts"));
let messages = JSON.parse(container.getAttribute("data-messages"));
this.form = form;
this.termsEl = container.querySelector(`#${container.id}_terms`);
this.postsEl = container.querySelector(`#${container.id}_posts`);
if (!this.termsEl || !this.postsEl) {
return;
}
this.dataSettings = dataSettings;
this.loadingMessage = messages["loading"];
this.noPostsMessage = messages["not_found"];
this.defaultMessage = messages["default_option"];
this.loadEvents();
this.form.element.addEventListener("reset", () => {
this.postsEl!.innerHTML = '";
});
}
loadEvents() {
this.termsEl!.addEventListener("change", () => {
this.loadPosts(this.termsEl!.value);
});
if (this.termsEl!.value != "") {
this.termsEl!.dispatchEvent(new Event("change"));
}
}
loadPosts(termId) {
if (!termId) {
this.postsEl!.innerHTML = '";
return;
}
this.postsEl!.innerHTML = '";
this.postsEl!.style.transition = "opacity 0.3s ease";
this.postsEl!.style.opacity = "0.5";
fetch(ajaxyFormsSettings.dataUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
type: "posts_by_term",
term_id: termId,
...this.dataSettings,
}),
})
.then((response) => response.json())
.then((response) => {
this.postsEl!.style.opacity = "1";
if (response.status != "success") {
console.error(response.message);
return;
}
this.postsEl!.innerHTML = "";
if (response.data.length == 0) {
this.postsEl!.innerHTML = '";
return;
}
response.data.forEach((post) => {
this.postsEl!.innerHTML += ``;
});
});
}
}
export default AjaxyTermPostsManager;