mirror of
				https://github.com/beestat/app.git
				synced 2025-11-04 02:47:01 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			237 lines
		
	
	
		
			6.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			237 lines
		
	
	
		
			6.3 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')
 | 
						|
  ];
 | 
						|
 | 
						|
  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);
 | 
						|
      }
 | 
						|
    );
 | 
						|
  });
 | 
						|
 | 
						|
  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');
 | 
						|
    }));
 | 
						|
};
 |