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