const { html, render } = lighterhtml; const $container = document.getElementById("sensors-container"); const $filters = document.createElement("div"); $filters.className = "filters"; $container.appendChild($filters); const $sensorsContainer = document.createElement("div"); $sensorsContainer.className = "sensors"; $container.appendChild($sensorsContainer); const $config = document.createElement("div"); $config.className = "config"; $container.appendChild($config); let sensorComponents = []; function load() { fetch("/api/sensors") .then((r) => r.json()) .then((sensors) => { $sensorsContainer.innerHTML = ""; sensorComponents = sensors.map((sensor) => createSensor(sensor)); sensorComponents.forEach((component) => $sensorsContainer.appendChild(component.container) ); }); } function preventPropagation(e) { e.stopPropagation(); } function hideConfig() { renderConfig({ sensor: { config: {} }, shown: false }); } function showConfigOf(sensor, onSave) { renderConfig({ sensor, onSave, shown: true }); } function renderConfig({ sensor, onSave, shown }) { const handleSave = async (e) => { e.preventDefault(); e.stopPropagation(); const data = Object.fromEntries(new FormData(e.target)); Promise.all( Object.entries(data).map(([name, value]) => fetch(`/api/sensors/${sensor.sensor}/config/${name}`, { method: "PUT", headers: { "content-type": "application/json" }, body: JSON.stringify({ value }), }) ) ).then(() => onSave?.()); hideConfig(); }; const config = sensor.config; render( $config, html`