{-# LANGUAGE OverloadedStrings #-}
module TODOMVCAtomic.Update where
import TODOMVCAtomic.Types
appendItem' :: Model -> Model
appendItem' m = if _current m /= "" then m
{ _tasks = Task (_current m) Incomplete ((+ 1)
$ Prelude.maximum $ 0 : (_taskId <$> _tasks m)) : _tasks m
, _current = "" }
else m
toggleCompleted :: TaskId -> Model -> Model
toggleCompleted tid m = m { _tasks =
(\t -> if _taskId t == tid then t { _completed = negC (_completed t) } else t) <$> _tasks m }
where negC Complete = Incomplete
negC Incomplete = Complete
updateTaskDescription :: TaskId -> Description -> Model -> Model
updateTaskDescription tid desc m = m { _tasks = f <$> _tasks m}
where f t = if _taskId t == tid then t { _description = desc } else t
toggleAll :: Model -> Model
toggleAll m = m { _tasks = (\t -> t { _completed = c }) <$> _tasks m}
where c = if Prelude.all ((== Complete) . _completed) $ _tasks m then Incomplete else Complete
count :: Completed -> [Task] -> Int
count c = length . filter ((== c) . _completed)
clearComplete :: Model -> Model
clearComplete m = m { _tasks = filter ((== Incomplete) . _completed) (_tasks m) }
toVisible :: Visibility -> [Task] -> [Task]
toVisible v = case v of
All -> id
Active -> filter $ (== Incomplete) . _completed
Completed -> filter $ (== Complete) . _completed