import { deviceDetailsPopup } from "./device-details-popup.js";
function sidebarTemplate(active) {
return Helper.template.sidebarNav([
{
content: `<span class="list-label"><i class="ph ph-cpu"></i> Devices</span>`,
route: "/#!/devices",
is_active: active == "devices"
},
{
content: `<span class="list-label"><i class="ph ph-magnifying-glass"></i> Scanning</span>`,
route: "/#!/devices/scanning",
is_active: active == "scanning"
}
]);
}
function list(sh_api) {
return {
alias: "devices",
renderer: () => {
const sidebar = sidebarTemplate("devices");
return `
<div class="container">
<div class="row g-6">
<div class="col sidebar-container">
${sidebar}
</div>
<div class="col devices-container"></div>
</div>
</div>
`;
},
initer: scr => {
sh_api.devices.list((err, resp, meta) => {
console.log("sh_api.devices.list", err, resp, meta);
if(meta.status_code != 200) {
return scr.error("Server API ERROR", "");
}
const preparedData = [];
for(let device of resp.data.devices) {
const connectionState = device.connection_state == "active"
? `<span class="badge badge-success">Online</span>`
: `<span class="badge badge-warning">Offline</span>`;
preparedData.push({
deviceName: device.name,
alias: device.alias,
status: connectionState,
ip: `<code class="code">${device.device_ip}</code>`,
actions: `
<button
class="btn btn-secondary btn-small details-btn"
data-device='${JSON.stringify(device)}'
type="button"
>Details</button>
<button
class="btn btn-warning btn-small reboot-btn"
data-device-id="${device.id}"
data-device-name="${device.name}"
data-device-alias="${device.alias}"
type="button"
>Reboot</button>
`
});
}
scr.currentScreen.DOMObject.querySelector(".devices-container").innerHTML = Helper.template.table(
"Devices list",
{
deviceName: "Device name",
alias: "Device alias",
status: "Status",
ip: "IP",
actions: "Actions"
},
preparedData,
`<span class="table-meta">Total: <span class="total">${resp.data.total}</span> devices</span>`
);
scr.currentScreen.DOMObject.querySelectorAll(".reboot-btn").forEach(btn => {
btn.addEventListener("click", e => {
const deviceId = e.currentTarget.dataset.deviceId;
const deviceName = e.currentTarget.dataset.deviceName;
const deviceAlias = e.currentTarget.dataset.deviceAlias;
sh_api.devices.reboot(
deviceId,
(err, data, meta) => {
console.log("Reboot done", Toasts);
Toasts.createSuccess(
"Reboot successful",
`Device: ${deviceName}<br>
Alias: <b>${deviceAlias}</b>`
).show();
}
);
});
});
scr.currentScreen.DOMObject.querySelectorAll(".details-btn").forEach(btn => {
btn.addEventListener("click", e => {
const device = JSON.parse(e.currentTarget.dataset.device);
deviceDetailsPopup(device, sh_api).show();
});
});
scr.ready();
});
}
};
}
function scanning(sh_api) {
return {
alias: "devices-scanning",
renderer: () => {
const sidebar = sidebarTemplate("scanning");
return `
<div class="container">
<div class="row g-6">
<div class="col sidebar-container">
${sidebar}
</div>
<div class="col devices-container"></div>
</div>
</div>
`;
},
initer: scr => {
sh_api.devices.scanning_all((err, resp, meta) => {
console.log("sh_api.devices.scanning_all", err, resp);
if(meta.status_code != 200) {
return scr.error("Server API ERROR", "");
}
const preparedData = [];
for(let device of resp.data.devices) {
preparedData.push({
deviceId: device.device_id,
deviceName: device.device_name,
deviceType: device.device_type,
status: `<span class="badge badge-primary">${device.status}</span>`,
ip: `<code class="code">${device.ip_address}</code>`,
wifiSignal: device.wifi_signal,
actions: `
<button
class="btn btn-secondary btn-small setup-btn"
data-device-id="${device.device_id}"
data-device-ip="${device.ip_address}"
data-device-name="${device.device_name}"
type="button"
>Setup</button>
`
});
}
scr.currentScreen.DOMObject.querySelector(".devices-container").innerHTML = Helper.template.table(
"Found devices",
{
deviceId: "Device ID",
deviceName: "Device name",
deviceType: "Type",
status: "Status",
ip: "IP",
wifiSignal: "Signal",
actions: "Actions"
},
preparedData,
`<span class="table-meta">Total: <span class="total">${resp.data.devices.length}</span> devices</span>`
);
scr.currentScreen.DOMObject.querySelectorAll(".setup-btn").forEach(btn => {
btn.addEventListener("click", e => {
const deviceIP = e.currentTarget.dataset.deviceIp;
const deviceID = e.currentTarget.dataset.deviceId;
const deviceName = e.currentTarget.dataset.deviceName;
});
});
scr.ready();
});
}
};
}
export default {
list,
scanning
}