class PumpCard extends HTMLElement {
constructor() {
super();
this.enabled = false;
}
connectedCallback() {
this.innerHTML = `
Pump
DC pump switch
`;
this.querySelector('#toggle').addEventListener('click', () => this.setPump(!this.enabled));
this.querySelector('#refresh').addEventListener('click', () => this.loadPump());
window.addEventListener('app:login', () => this.loadPump());
if (window.App && window.App.token()) this.loadPump();
}
render(json) {
this.enabled = !!json.enabled;
this.querySelector('#state').textContent = this.enabled ? 'On' : 'Off';
this.querySelector('#dot').classList.toggle('on', this.enabled);
this.querySelector('#toggle').textContent = this.enabled ? 'Turn off' : 'Turn on';
}
async loadPump() {
const text = await window.App.req('GET', '/api/pump');
this.querySelector('#out').textContent = text;
try {
const json = JSON.parse(text);
if (json.success) this.render(json);
} catch (error) {}
}
async setPump(enabled) {
const text = await window.App.req('POST', '/api/pump', {enabled});
this.querySelector('#out').textContent = text;
try {
const json = JSON.parse(text);
if (json.success) this.render(json);
} catch (error) {}
}
}
customElements.define('pump-card', PumpCard);