1
0
mirror of https://github.com/beestat/app.git synced 2025-05-24 02:14:03 -04:00
beestat/js/component/card/settings.js
2022-10-18 08:46:28 -04:00

347 lines
8.8 KiB
JavaScript

/**
* Setting
*/
beestat.component.card.settings = function() {
beestat.component.card.apply(this, arguments);
};
beestat.extend(beestat.component.card.settings, beestat.component.card);
/**
* Decorate contents.
*
* @param {rocket.Elements} parent Parent
*/
beestat.component.card.settings.prototype.decorate_contents_ = function(parent) {
const thermostat = beestat.cache.thermostat[
beestat.setting('thermostat_id')
];
/**
* Units
*/
parent.appendChild(
$.createElement('p')
.style('font-weight', '400')
.innerText('Units')
);
// Temperature
parent.appendChild(
$.createElement('p')
.innerText('Temperature')
);
const temperature_radio_group = new beestat.component.radio_group()
.set_arrangement('horizontal');
[
'°F',
'°C'
].forEach(function(temperature_unit) {
temperature_radio_group.add_radio(
new beestat.component.input.radio()
.set_label(temperature_unit)
.set_value(temperature_unit)
.set_checked(beestat.setting('units.temperature') === temperature_unit)
);
});
temperature_radio_group.addEventListener('change', function() {
beestat.setting('units.temperature', temperature_radio_group.get_value());
});
temperature_radio_group.render(parent);
// Distance
parent.appendChild(
$.createElement('p')
.innerText('Distance / Area')
);
const distance_radio_group = new beestat.component.radio_group()
.set_arrangement('horizontal');
[
'ft',
'm'
].forEach(function(distance_unit) {
distance_radio_group.add_radio(
new beestat.component.input.radio()
.set_label(distance_unit + ' / ' + distance_unit + '²')
.set_value(distance_unit)
.set_checked(beestat.setting('units.distance') === distance_unit)
);
});
distance_radio_group.addEventListener('change', function() {
beestat.setting({
'units.distance': distance_radio_group.get_value(),
'units.area': distance_radio_group.get_value() + '²'
});
});
distance_radio_group.render(parent);
// Currency
parent.appendChild(
$.createElement('p')
.innerText('Currency')
);
const currency_select = new beestat.component.input.select()
.add_option({
'label': 'USD',
'value': 'usd'
})
.add_option({
'label': 'CAD',
'value': 'cad'
})
.add_option({
'label': 'AUD',
'value': 'aud'
})
.add_option({
'label': 'GBP',
'value': 'gpb'
});
currency_select.render(parent);
currency_select.set_value(beestat.setting('units.currency'));
currency_select.addEventListener('change', function() {
beestat.setting({
'units.currency': currency_select.get_value()
});
});
/**
* Thermosat Summary
*/
parent.appendChild(
$.createElement('p')
.style('font-weight', '400')
.innerText('Thermostat Summary')
);
// Gap Fill
const enable_gap_fill = new beestat.component.input.checkbox();
enable_gap_fill
.set_label('Enable Gap Fill')
.set_checked(beestat.setting('runtime_thermostat_summary_gap_fill'))
.render(parent);
enable_gap_fill.addEventListener('change', function() {
enable_gap_fill.set_enabled(false);
beestat.setting(
'runtime_thermostat_summary_gap_fill',
enable_gap_fill.get_checked(),
function() {
enable_gap_fill.set_enabled(true);
}
);
});
// Smart Scale
const enable_smart_scale = new beestat.component.input.checkbox();
enable_smart_scale
.set_label('Enable Smart Scale')
.set_checked(beestat.setting('runtime_thermostat_summary_smart_scale'))
.render(parent);
enable_smart_scale.addEventListener('change', function() {
enable_smart_scale.set_enabled(false);
beestat.setting(
'runtime_thermostat_summary_smart_scale',
enable_smart_scale.get_checked(),
function() {
enable_smart_scale.set_enabled(true);
}
);
});
/**
* Temperature Profiles
*/
parent.appendChild(
$.createElement('p')
.style({
'font-weight': '400',
'margin-top': (beestat.style.size.gutter * 2) + 'px'
})
.innerText('Temperature Profiles')
);
const ignore_solar_gain = new beestat.component.input.checkbox();
const ignore_solar_gain_key = 'thermostat.' + thermostat.thermostat_id + '.profile.ignore_solar_gain';
ignore_solar_gain
.set_label('Ignore Solar Gain')
.set_checked(beestat.setting(ignore_solar_gain_key))
.render(parent);
ignore_solar_gain.addEventListener('change', function() {
ignore_solar_gain.set_enabled(false);
beestat.setting(
ignore_solar_gain_key,
ignore_solar_gain.get_checked(),
function() {
/**
* Clear the API call cache and delete the profile so it regenerates
* next time you go to the page.
*/
new beestat.api()
.add_call(
'thermostat',
'generate_profile',
{
'thermostat_id': thermostat.thermostat_id
},
undefined,
undefined,
undefined,
// Clear cache
true
)
.add_call(
'thermostat',
'update',
{
'attributes': {
'thermostat_id': thermostat.thermostat_id,
'profile': null
}
}
)
.add_call(
'thermostat',
'read_id',
{
'attributes': {
'inactive': 0
}
},
'thermostat'
)
.set_callback(function(response) {
ignore_solar_gain.set_enabled(true);
beestat.cache.set('thermostat', response.thermostat);
})
.send();
}
);
});
// Temperature profile begin/end
const temperature_profiles_range_begin_key = 'thermostat.' + thermostat.thermostat_id + '.profile.range_begin';
parent.appendChild(
$.createElement('p')
.innerText('Custom Start Date')
);
var temperature_profiles_range_begin = new beestat.component.input.text()
.set_maxlength(10)
.set_requirements({
'type': 'date'
})
.set_icon('calendar');
if (
beestat.setting(temperature_profiles_range_begin_key) !== undefined &&
beestat.setting(temperature_profiles_range_begin_key) !== null
) {
temperature_profiles_range_begin.set_value(
beestat.setting(temperature_profiles_range_begin_key)
);
}
temperature_profiles_range_begin.addEventListener('change', function() {
var temperature_profiles_range_begin_value;
if (temperature_profiles_range_begin.meets_requirements() === true) {
temperature_profiles_range_begin_value = this.get_value();
} else {
this.set_value('', false);
temperature_profiles_range_begin_value = null;
}
beestat.setting(
temperature_profiles_range_begin_key,
temperature_profiles_range_begin_value,
function() {
/**
* Clear the API call cache and delete the profile so it regenerates
* next time you go to the page.
*/
new beestat.api()
.add_call(
'thermostat',
'generate_profile',
{
'thermostat_id': thermostat.thermostat_id
},
undefined,
undefined,
undefined,
// Clear cache
true
)
.add_call(
'thermostat',
'update',
{
'attributes': {
'thermostat_id': thermostat.thermostat_id,
'profile': null
}
}
)
.add_call(
'thermostat',
'read_id',
{
'attributes': {
'inactive': 0
}
},
'thermostat'
)
.set_callback(function(response) {
beestat.cache.set('thermostat', response.thermostat);
})
.send();
}
);
});
temperature_profiles_range_begin.render(parent);
};
/**
* Get the title of the card.
*
* @return {string} The title.
*/
beestat.component.card.settings.prototype.get_title_ = function() {
return 'Settings';
};
/**
* Decorate the menu
*
* @param {rocket.Elements} parent
*/
beestat.component.card.settings.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('https://doc.beestat.io/9d01e7256390473ca8121d4098d91c9d');
}));
menu.add_menu_item(new beestat.component.menu_item()
.set_text('Contribute (New)')
.set_icon('credit_card_lock')
.set_callback(function() {
new beestat.layer.contribute().render();
}));
};