Disable bulb controls when no bulbs selected

This commit is contained in:
2023-11-05 12:49:22 +01:00
parent ac306eece4
commit 548e7d3240
7 changed files with 55 additions and 16 deletions

View File

@ -3,8 +3,8 @@ use crate::css::C;
use chrono::{NaiveTime, Weekday};
use common::{BulbGroup, BulbGroupShape, BulbMap, ClientMessage, ServerMessage};
use lighter_lib::{BulbId, BulbMode};
use seed::prelude::*;
use seed::{attrs, button, div, input, C};
use seed::{prelude::*, IF};
use seed_router::Page;
use std::collections::{BTreeMap, HashMap, HashSet};
use std::fmt::Write;
@ -228,14 +228,11 @@ impl Page for Model {
.next()
.and_then(|&index| self.bulb_map.groups.get(index))
.and_then(|group| group.bulbs.first())
.and_then(|id| self.bulb_states.get(id))
.cloned() // TODO: remove clone
.unwrap_or_default();
.and_then(|id| self.bulb_states.get(id));
let calendar_day = |day: Weekday| {
let time = selected_bulb
.wake_schedule
.get(&day)
.and_then(|b| b.wake_schedule.get(&day))
.map(|t| t.to_string())
.unwrap_or_default();
div![
@ -261,18 +258,20 @@ impl Page for Model {
],
div![
C![C.bulb_controls],
IF!(selected_bulb.is_none() => C![C.bulb_controls_disable]),
self.color_picker
.view()
.map_msg(|msg| Msg::ColorPicker(msg)),
button![
if selected_bulb.mode.power {
if selected_bulb.map(|b| b.mode.power).unwrap_or(false) {
C![C.bulb_power_button, C.bulb_power_button_on]
} else {
C![C.bulb_power_button]
},
ev(Ev::Click, move |_| Msg::SetBulbPower(
!selected_bulb.mode.power
)),
{
let target_power = selected_bulb.map(|b| !b.mode.power);
ev(Ev::Click, move |_| target_power.map(Msg::SetBulbPower))
},
div![attrs! { At::Id => "switch_socket" }],
div![attrs! { At::Id => "off_label" }, "Off"],
div![attrs! { At::Id => "on_label" }, "On"],