module Update.Update ( Action(..) , updates , update ) where import Signal import Dict import Time (Time) import Maybe import Model.Model (..) import Model.Timer (..) import Model.TimerEdition (..) import Model.Id (..) import Model.IdGenerator (..) import Update.UpdateTimer (..) type Action = NoOp | AddNewTimer | DeltaTime Time | UpdateTimer Id TimerAction | RemoveTimer Id | EditTimer Id | ReadOnly updates : Signal.Channel Action updates = Signal.channel NoOp update : Action -> Model -> Model update action model = case action of NoOp -> model AddNewTimer -> let (id, newTimerIdGenerator) = getId model.timerIdGenerator timerName = "Timer " ++ (toString id) in { model | timers <- Dict.insert id (initialTimer model.currentTime timerName) model.timers , timerIdGenerator <- newTimerIdGenerator } 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 } EditTimer id -> { model | timerEdition <- Just (newTimerEdition id) } ReadOnly -> { model | timerEdition <- Nothing }