Keep update values updated from model

This commit is contained in:
Mikko Ahlroth 2023-09-23 09:32:01 +03:00
parent 3695d4874f
commit bea99ea701

View file

@ -41,7 +41,7 @@ pub type Model {
pub type Msg { pub type Msg {
DeviceLoadResult(Result(Device, ApiError)) DeviceLoadResult(Result(Device, ApiError))
StartUpdate(Device) StartUpdate
UpdateResults(List(UpdateResult)) UpdateResults(List(UpdateResult))
} }
@ -67,15 +67,21 @@ pub fn init(
pub fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) { pub fn update(model: Model, msg: Msg) -> #(Model, Effect(Msg)) {
case msg { case msg {
DeviceLoadResult(Ok(device)) -> #( DeviceLoadResult(Ok(device)) -> {
Model(..model, loading: False, device: Some(device)), let model = Model(..model, loading: False, device: Some(device))
update_state(model.config, model.user, device), #(model, update_state(model.config, model.user, device))
) }
StartUpdate(device) -> #( StartUpdate -> {
Model(..model, loading: True, device: Some(device)), case model.device {
effect.none(), Some(device) -> #(
) Model(..model, loading: True),
update_state(model.config, model.user, device),
)
None -> #(model, effect.none())
}
}
UpdateResults(results) -> #( UpdateResults(results) -> #(
list.fold( list.fold(
@ -891,24 +897,8 @@ fn load_device(config: Config, user: User, installation: InstallationInfo) {
fn update_state(config: Config, user: User, device: Device) { fn update_state(config: Config, user: User, device: Device) {
use dispatch <- effect.from() use dispatch <- effect.from()
dispatch(StartUpdate(device))
do_update_state(dispatch, config, user, device)
Nil
}
fn do_update_state( timers.set_timeout(fn() { dispatch(StartUpdate) }, config.api_refresh)
dispatch: fn(Msg) -> Nil,
config: Config,
user: User,
device: Device,
) {
timers.set_timeout(
fn() {
dispatch(StartUpdate(device))
do_update_state(dispatch, config, user, device)
},
config.api_refresh,
)
[ [
device_api.status(config, user, device) device_api.status(config, user, device)