import { sidebarTemplate } from "./scripts-funcs.js";
function prepareData(data) {
const preparedData = [];
for(let script of data.scripts) {
const state = script.state == "enabled"
? `<span class="badge badge-success">Enabled</span>`
: `<span class="badge badge-primary">Disabled</span>`;
const btnSwitch = script.state == "disabled"
? `<button
class="btn btn-success btn-small change-state-btn"
data-script='${JSON.stringify(script)}'
type="button"
data-value="enable"
>Enable</button>`
: `<button
class="btn btn-warning btn-small change-state-btn"
data-script='${JSON.stringify(script)}'
type="button"
data-value="disable"
>Disable</button>`;
preparedData.push({
alias: `${script.alias}<br><small class="text-muted">by ${script.created_by}</small>`,
name: `${script.name}<div class="mt-1"><small>${script.description}</small></div>`,
filename: `${script.filename}<br><code><small>${script.path}</small></code>`,
state: state,
actions: `
${btnSwitch}
`
});
}
return preparedData;
}
function renderingRegularScriptsTable(scr, data, total) {
console.log("renderingRegularScriptsTable", data);
scr.currentScreen.DOMObject.querySelector(".main-container").innerHTML = Helper.template.table(
"Regular scripts list",
{
alias: "Alias",
name: "Script name",
filename: "Filename",
state: "Status",
actions: "Actions"
},
data,
`<span class="table-meta">Total: <span class="total">${total}</span> scripts</span>`
);
}
function initTableInteractiveElements(scr, sh_api) {
scr.currentScreen.DOMObject.querySelectorAll(".change-state-btn").forEach(btn => {
btn.addEventListener("click", e => {
const btn = e.currentTarget;
if(btn.getAttribute("disabled")) {
return ;
}
const methName = btn.dataset.value == "enable"
? "regular_enable"
: "regular_disable"
const script = JSON.parse(btn.dataset.script);
Helper.states.btnLoadingState(btn, true);
sh_api.scripts[methName](script.alias, (err, data, meta) => {
Helper.states.btnLoadingState(btn, false);
if(data) {
setTimeout(() => Screens.reinit(), 250);
Toasts.createSuccess(
`Request Success`,
`State of <b>${script.alias}</b> was changed`
).show();
} else {
Toasts.createError(
"Request failed",
`Regular script state not changed`
).show();
}
});
});
});
}
function regular(sh_api) {
return {
title: "Scripts Regular",
alias: "scripts-regular",
renderer: () => {
const sidebar = sidebarTemplate("regular");
return `
<div class="container">
<div class="row g-6">
<div class="col sidebar-container">
${sidebar}
</div>
<div class="col main-container w-100"></div>
</div>
</div>
`;
},
initer: scr => {
sh_api.scripts.regular_list((err, resp, meta) => {
console.log("sh_api.scripts.regular_list", err, resp, meta);
if(meta.status_code != 200) {
return scr.error("Server API ERROR", "");
}
renderingRegularScriptsTable(scr, prepareData(resp.data), resp.data.total);
initTableInteractiveElements(scr, sh_api);
scr.ready();
});
}
}
}
export {
regular
}