module Update.Update ( Action(..) , updates , update ) where import Signal import Dict import Time (Time) import Maybe import Model.Model (..) import Model.Timer (..) import Model.Id (..) import Model.IdGenerator (..) import Update.UpdateTimer (..) type Action = NoOp | RenameNewTimer String | AddNewTimer | DeltaTime Time | UpdateTimer Id TimerAction | RemoveTimer Id updates : Signal.Channel Action updates = Signal.channel NoOp update : Action -> Model -> Model update action model = case action of NoOp -> model RenameNewTimer name -> { model | newTimerName <- name } AddNewTimer -> let (id, newTimerIdGenerator) = getId model.timerIdGenerator in { model | timers <- Dict.insert id (initialTimer model.currentTime model.newTimerName) model.timers , timerIdGenerator <- newTimerIdGenerator , newTimerName <- "" } DeltaTime delta -> { model | currentTime <- model.currentTime + delta , timers <- substractTimersTime delta model.timers } UpdateTimer id action -> { model | timers <- Dict.update id (Maybe.map (updateTimer action)) model.timers } RemoveTimer id -> { model | timers <- Dict.remove id model.timers }