mirror of
https://github.com/beestat/app.git
synced 2025-05-24 02:14:03 -04:00
188 lines
4.9 KiB
JavaScript
188 lines
4.9 KiB
JavaScript
/**
|
|
* Setting
|
|
*/
|
|
beestat.component.card.manage_thermostats = function() {
|
|
const self = this;
|
|
|
|
var change_function = beestat.debounce(function() {
|
|
self.rerender();
|
|
}, 10);
|
|
|
|
beestat.dispatcher.addEventListener(
|
|
[
|
|
'cache.ecobee_thermostat'
|
|
],
|
|
change_function
|
|
);
|
|
|
|
beestat.component.card.apply(this, arguments);
|
|
};
|
|
beestat.extend(beestat.component.card.manage_thermostats, beestat.component.card);
|
|
|
|
/**
|
|
* Decorate contents.
|
|
*
|
|
* @param {rocket.Elements} parent Parent
|
|
*/
|
|
beestat.component.card.manage_thermostats.prototype.decorate_contents_ = function(parent) {
|
|
const self = this;
|
|
|
|
var p = document.createElement('p');
|
|
p.innerText = 'Thermostats directly connected to your ecobee account are automatically added and synced. In some cases, shared thermostats cannot be automatically detected. Add them here.';
|
|
parent.appendChild(p);
|
|
|
|
// Existing
|
|
(new beestat.component.title('Existing Thermostats')).render(parent);
|
|
|
|
var sorted_ecobee_thermostats = $.values(beestat.cache.ecobee_thermostat)
|
|
.sort(function(a, b) {
|
|
return a.name > b.name;
|
|
});
|
|
|
|
const table = document.createElement('table');
|
|
sorted_ecobee_thermostats.forEach(function(ecobee_thermostat) {
|
|
const tr = document.createElement('tr');
|
|
|
|
const td_name = document.createElement('td');
|
|
td_name.style.paddingRight = `${beestat.style.size.gutter}px`;
|
|
const td_identifier = document.createElement('td');
|
|
const td_delete = document.createElement('td');
|
|
|
|
td_name.innerText = ecobee_thermostat.name || '(Sync Queued)';
|
|
td_identifier.innerText = ecobee_thermostat.identifier;
|
|
|
|
const tile_delete = new beestat.component.tile()
|
|
.set_icon('trash_can')
|
|
.set_shadow(false)
|
|
.set_text_color(beestat.style.color.red.base)
|
|
.render($(td_delete));
|
|
|
|
tile_delete.addEventListener('click', function() {
|
|
self.show_loading_();
|
|
|
|
new beestat.api()
|
|
.add_call(
|
|
'ecobee_thermostat',
|
|
'update',
|
|
{
|
|
'attributes': {
|
|
'ecobee_thermostat_id': ecobee_thermostat.ecobee_thermostat_id,
|
|
'inactive': 1
|
|
}
|
|
},
|
|
'delete'
|
|
)
|
|
.add_call(
|
|
'ecobee_thermostat',
|
|
'read_id',
|
|
{
|
|
'attributes': {
|
|
'inactive': 0
|
|
}
|
|
},
|
|
'read_id'
|
|
)
|
|
.set_callback(function(response) {
|
|
beestat.cache.set('ecobee_thermostat', response.read_id);
|
|
})
|
|
.send();
|
|
})
|
|
|
|
tr.appendChild(td_name);
|
|
tr.appendChild(td_identifier);
|
|
tr.appendChild(td_delete);
|
|
|
|
table.appendChild(tr);
|
|
});
|
|
|
|
parent.appendChild(table);
|
|
|
|
// New
|
|
(new beestat.component.title('Add Thermostat')).render(parent);
|
|
|
|
const container = document.createElement('div');
|
|
parent.appendChild(container);
|
|
|
|
Object.assign(container.style, {
|
|
'display': 'flex',
|
|
'flex-direction': 'row',
|
|
'grid-gap': `${beestat.style.size.gutter}px`,
|
|
});
|
|
|
|
const input_container = document.createElement('div');
|
|
container.appendChild(input_container);
|
|
|
|
const new_identifier = new beestat.component.input.text()
|
|
.set_width(150)
|
|
.set_maxlength(12)
|
|
.set_inputmode('numeric')
|
|
.set_placeholder('Serial #')
|
|
.render($(input_container));
|
|
|
|
const button_container = document.createElement('div');
|
|
container.appendChild(button_container);
|
|
|
|
const tile_add = new beestat.component.tile()
|
|
.set_background_color(beestat.style.color.green.base)
|
|
.set_background_hover_color(beestat.style.color.green.light)
|
|
.set_text_color('#fff')
|
|
.set_text('Add Thermostat')
|
|
.addEventListener('click', function() {
|
|
if (new_identifier.get_value()?.length === 12) {
|
|
self.show_loading_();
|
|
|
|
new beestat.api()
|
|
.add_call(
|
|
'ecobee_thermostat',
|
|
'create',
|
|
{
|
|
'attributes': {
|
|
'identifier': new_identifier.get_value()
|
|
}
|
|
},
|
|
'create'
|
|
)
|
|
.add_call(
|
|
'ecobee_thermostat',
|
|
'read_id',
|
|
{
|
|
'attributes': {
|
|
'inactive': 0
|
|
}
|
|
},
|
|
'read_id'
|
|
)
|
|
.set_callback(function(response) {
|
|
beestat.cache.set('ecobee_thermostat', response.read_id);
|
|
})
|
|
.send();
|
|
}
|
|
})
|
|
.render($(button_container));
|
|
};
|
|
|
|
/**
|
|
* Get the title of the card.
|
|
*
|
|
* @return {string} The title.
|
|
*/
|
|
beestat.component.card.manage_thermostats.prototype.get_title_ = function() {
|
|
return 'Manage Thermostats';
|
|
};
|
|
|
|
/**
|
|
* Decorate the menu
|
|
*
|
|
* @param {rocket.Elements} parent
|
|
*/
|
|
beestat.component.card.manage_thermostats.prototype.decorate_top_right_ = function(parent) {
|
|
var menu = (new beestat.component.menu()).render(parent);
|
|
|
|
menu.add_menu_item(new beestat.component.menu_item()
|
|
.set_text('Help')
|
|
.set_icon('help_circle')
|
|
.set_callback(function() {
|
|
window.open('TODO');
|
|
}));
|
|
};
|