1
0
mirror of https://github.com/beestat/app.git synced 2025-05-24 02:14:03 -04:00
beestat/js/component/card/visualize_settings.js

384 lines
11 KiB
JavaScript

/**
* Visualize settings.
*/
beestat.component.card.visualize_settings = function() {
const self = this;
beestat.dispatcher.addEventListener('cache.floor_plan', function() {
self.rerender();
});
beestat.component.card.apply(this, arguments);
};
beestat.extend(beestat.component.card.visualize_settings, beestat.component.card);
/**
* Decorate
*
* @param {rocket.Elements} parent
*/
beestat.component.card.visualize_settings.prototype.decorate_contents_ = function(parent) {
const grid_1 = document.createElement('div');
Object.assign(grid_1.style, {
'display': 'grid',
'grid-template-columns': 'repeat(auto-fit, minmax(min(350px, 100%), 1fr))',
'grid-gap': `${beestat.style.size.gutter}px`,
'margin-bottom': `${beestat.style.size.gutter}px`
});
parent.appendChild(grid_1);
const type_container = document.createElement('div');
this.decorate_data_type_(type_container);
grid_1.appendChild(type_container);
const time_period_container = document.createElement('div');
this.decorate_time_period_(time_period_container);
grid_1.appendChild(time_period_container);
const grid_2 = document.createElement('div');
Object.assign(grid_2.style, {
'display': 'grid',
'grid-template-columns': 'repeat(auto-fit, minmax(min(350px, 100%), 1fr))',
'grid-gap': `${beestat.style.size.gutter}px`
});
parent.appendChild(grid_2);
const heat_map_type_container = document.createElement('div');
this.decorate_heat_map_type_(heat_map_type_container);
grid_2.appendChild(heat_map_type_container);
const floor_plan_container = document.createElement('div');
this.decorate_floor_plan_(floor_plan_container);
grid_2.appendChild(floor_plan_container);
};
/**
* Decorate the type options.
*
* @param {HTMLDivElement} parent
*/
beestat.component.card.visualize_settings.prototype.decorate_data_type_ = function(parent) {
const self = this;
(new beestat.component.title('Data Type')).render($(parent));
const types = [
{
'code': 'temperature',
'name': 'Temperature',
'icon': 'thermometer'
},
{
'code': 'occupancy',
'name': 'Occupancy',
'icon': 'eye'
}
];
const color = beestat.style.color.green.base;
const tile_group = new beestat.component.tile_group();
types.forEach(function(type) {
const tile = new beestat.component.tile()
.set_background_hover_color(color)
.set_text_color('#fff')
.set_icon(type.icon)
.set_text(type.name);
if (beestat.setting('visualize.data_type') === type.code) {
tile.set_background_color(color);
} else {
tile
.set_background_color(beestat.style.color.bluegray.light)
.addEventListener('click', function() {
beestat.setting('visualize.data_type', type.code);
self.rerender();
});
}
tile_group.add_tile(tile);
});
tile_group.render($(parent));
};
/**
* Decorate the type options.
*
* @param {HTMLDivElement} parent
*/
beestat.component.card.visualize_settings.prototype.decorate_heat_map_type_ = function(parent) {
const self = this;
(new beestat.component.title('Heat Map Type')).render($(parent));
const types = [
{
'code': 'relative',
'name': 'Relative',
'icon': 'arrow_expand_horizontal'
},
{
'code': 'absolute',
'name': 'Absolute',
'icon': 'arrow_horizontal_lock'
}
];
const color = beestat.style.color.orange.base;
const tile_group = new beestat.component.tile_group();
types.forEach(function(type) {
const tile = new beestat.component.tile()
.set_background_hover_color(color)
.set_text_color('#fff')
.set_icon(type.icon)
.set_text(type.name);
if (beestat.setting('visualize.heat_map_type') === type.code) {
tile.set_background_color(color);
} else {
tile
.set_background_color(beestat.style.color.bluegray.light)
.addEventListener('click', function() {
beestat.setting('visualize.heat_map_type', type.code);
self.rerender();
});
}
tile_group.add_tile(tile);
});
tile_group.render($(parent));
if (beestat.setting('visualize.heat_map_type') === 'absolute') {
const min_max_container = document.createElement('div');
min_max_container.style.marginTop = `${beestat.style.size.gutter}px`;
parent.appendChild(min_max_container);
const min = new beestat.component.input.text()
.set_value(beestat.setting(
'visualize.heat_map_absolute.' + beestat.setting('visualize.data_type') + '.min')
)
.set_width(50);
min.addEventListener('change', function() {
beestat.setting('visualize.heat_map_absolute.' + beestat.setting('visualize.data_type') + '.min', min.get_value());
});
const max = new beestat.component.input.text()
.set_value(beestat.setting(
'visualize.heat_map_absolute.' + beestat.setting('visualize.data_type') + '.max')
)
.set_width(50);
max.addEventListener('change', function() {
beestat.setting('visualize.heat_map_absolute.' + beestat.setting('visualize.data_type') + '.max', max.get_value());
});
let span;
span = document.createElement('span');
span.style.display = 'inline-block';
min.render($(span));
parent.appendChild(span);
span = document.createElement('span');
span.innerText = 'to';
Object.assign(span.style, {
'display': 'inline-block',
'margin-left': `${beestat.style.size.gutter}px`,
'margin-right': `${beestat.style.size.gutter}px`
});
parent.appendChild(span);
span = document.createElement('span');
span.style.display = 'inline-block';
max.render($(span));
parent.appendChild(span);
span = document.createElement('span');
switch (beestat.setting('visualize.data_type')) {
case 'temperature':
span.innerText = beestat.setting('temperature_unit');
break;
case 'occupancy':
span.innerText = '%';
break;
}
Object.assign(span.style, {
'display': 'inline-block',
'margin-left': `${beestat.style.size.gutter}px`
});
parent.appendChild(span);
}
};
/**
* Decorate the type options.
*
* @param {HTMLDivElement} parent
*/
beestat.component.card.visualize_settings.prototype.decorate_time_period_ = function(parent) {
const self = this;
(new beestat.component.title('Time Period')).render($(parent));
const color = beestat.style.color.purple.base;
const tile_group = new beestat.component.tile_group();
// Current Day
const current_day_tile = new beestat.component.tile()
.set_background_hover_color(color)
.set_text_color('#fff')
.set_icon('calendar')
.set_text('Today');
if (
beestat.setting('visualize.range_type') === 'dynamic' &&
beestat.setting('visualize.range_dynamic') === 0
) {
current_day_tile.set_background_color(color);
} else {
current_day_tile
.set_background_color(beestat.style.color.bluegray.light)
.addEventListener('click', function() {
beestat.cache.delete('data.three_d__runtime_sensor');
beestat.setting('visualize.range_type', 'dynamic');
beestat.setting('visualize.range_dynamic', 0);
self.rerender();
});
}
tile_group.add_tile(current_day_tile);
// Yesterday
const yesterday_tile = new beestat.component.tile()
.set_background_hover_color(color)
.set_text_color('#fff')
.set_icon('calendar')
.set_text('Yesterday');
if (
beestat.setting('visualize.range_type') === 'dynamic' &&
beestat.setting('visualize.range_dynamic') === 1
) {
yesterday_tile.set_background_color(color);
} else {
yesterday_tile
.set_background_color(beestat.style.color.bluegray.light)
.addEventListener('click', function() {
beestat.cache.delete('data.three_d__runtime_sensor');
beestat.setting('visualize.range_type', 'dynamic');
beestat.setting('visualize.range_dynamic', 1);
self.rerender();
});
}
tile_group.add_tile(yesterday_tile);
// Current Week
const week_tile = new beestat.component.tile()
.set_background_hover_color(color)
.set_text_color('#fff')
.set_icon('calendar_week')
.set_text('Last 7 Days');
if (
beestat.setting('visualize.range_type') === 'dynamic' &&
beestat.setting('visualize.range_dynamic') === 7
) {
week_tile.set_background_color(color);
} else {
week_tile
.set_background_color(beestat.style.color.bluegray.light)
.addEventListener('click', function() {
beestat.cache.delete('data.three_d__runtime_sensor');
beestat.setting('visualize.range_type', 'dynamic');
beestat.setting('visualize.range_dynamic', 7);
self.rerender();
});
}
tile_group.add_tile(week_tile);
// Custom
/* const custom_tile = new beestat.component.tile()
.set_background_hover_color(color)
.set_text_color('#fff')
.set_icon('calendar_edit')
.set_text('Custom');
if (
beestat.setting('visualize.range_type') === 'static'
) {
custom_tile.set_background_color(color);
} else {
custom_tile
.set_background_color(beestat.style.color.bluegray.light)
.addEventListener('click', function() {
// TODO MODAL
beestat.setting('visualize.range_type', 'static');
self.rerender();
});
}
tile_group.add_tile(custom_tile);*/
tile_group.render($(parent));
};
/**
* Decorate the floor plan options.
*
* @param {HTMLDivElement} parent
*/
beestat.component.card.visualize_settings.prototype.decorate_floor_plan_ = function(parent) {
const self = this;
(new beestat.component.title('Floor Plan')).render($(parent));
var sorted_floor_plans = $.values(beestat.cache.floor_plan)
.sort(function(a, b) {
return a.name > b.name;
});
const tile_group = new beestat.component.tile_group();
sorted_floor_plans.forEach(function(floor_plan) {
const tile = new beestat.component.tile.floor_plan(floor_plan.floor_plan_id)
.set_text_color('#fff')
.set_display('block');
if (floor_plan.floor_plan_id === beestat.setting('visualize.floor_plan_id')) {
tile.set_background_color(beestat.style.color.lightblue.base);
} else {
tile
.set_background_color(beestat.style.color.bluegray.light)
.set_background_hover_color(beestat.style.color.lightblue.base)
.addEventListener('click', function() {
beestat.setting('visualize.floor_plan_id', floor_plan.floor_plan_id);
self.rerender();
});
}
tile_group.add_tile(tile);
});
tile_group.render($(parent));
};
/**
* Get the title of the card.
*
* @return {string} The title of the card.
*/
beestat.component.card.visualize_settings.prototype.get_title_ = function() {
return 'Visualize Settings';
};
/**
* Decorate the menu.
*
* @param {rocket.Elements} parent
*/
beestat.component.card.visualize_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() {
// TODO
// window.open('https://doc.beestat.io/596040eadd014928830b4d1d54692761');
}));
};