taskell-1.9.3.0: src/Taskell/Events/State/Modal/Due.hs
module Taskell.Events.State.Modal.Due
( showDue
, clearDate
, previous
, next
, goto
) where
import ClassyPrelude
import Control.Lens ((&), (.~), (^.))
import Data.Sequence ((!?))
import qualified Taskell.Data.Lists as L (clearDue, due)
import Taskell.Data.Seq (bound)
import Taskell.Data.Task (Task)
import Taskell.Events.State.Types (Stateful, current, lists, mode)
import Taskell.Events.State.Types.Mode (ModalType (Due), Mode (..))
import Taskell.Types (Pointer)
type DueStateful = Seq (Pointer, Task) -> Int -> Stateful
λfilter :: DueStateful -> Stateful
λfilter fn state =
case state ^. mode of
Modal (Due due cur) -> fn due cur state
_ -> pure state
λsetMode :: DueStateful
λsetMode due pos state = pure $ state & mode .~ Modal (Due due pos)
λprevious :: DueStateful
λprevious due cur = λsetMode due (bound due (cur - 1))
λnext :: DueStateful
λnext due cur = λsetMode due (bound due (cur + 1))
λgoto :: DueStateful
λgoto due cur state =
case due !? cur of
Just (pointer, _) -> pure $ state & current .~ pointer
Nothing -> Nothing
λclearDate :: DueStateful
λclearDate due cur state =
case due !? cur of
Just (pointer, _) -> do
let new = L.clearDue pointer (state ^. lists)
let dues = L.due new
λsetMode dues (bound dues cur) (state & lists .~ new)
Nothing -> Nothing
showDue :: Stateful
showDue state = λsetMode (L.due (state ^. lists)) 0 state
previous :: Stateful
previous = λfilter λprevious
next :: Stateful
next = λfilter λnext
goto :: Stateful
goto = λfilter λgoto
clearDate :: Stateful
clearDate = λfilter λclearDate