{-# LANGUAGE OverloadedLists #-}

module Taskell.Events.Actions.Modal.Due
    ( event
    , events
    ) where

import ClassyPrelude

import Graphics.Vty.Input.Events         (Event (EvKey))
import Taskell.Events.Actions.Types      as A (ActionType (..))
import Taskell.Events.State              (normalMode, store, write)
import Taskell.Events.State.Modal.Detail (showDetail)
import Taskell.Events.State.Modal.Due    (clearDate, goto, next, previous)
import Taskell.Events.State.Types        (Stateful)
import Taskell.IO.Keyboard.Types         (Actions)

events :: Actions
events :: Actions
events =
    [ (ActionType
A.Previous, Stateful
previous)
    , (ActionType
A.Next, Stateful
next)
    , (ActionType
A.Detail, (Stateful
showDetail Stateful -> Maybe State -> Maybe State
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<<) (Maybe State -> Maybe State) -> Stateful -> Stateful
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Stateful
goto)
    , (ActionType
A.ClearDate, (Stateful
write Stateful -> Maybe State -> Maybe State
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<<) (Maybe State -> Maybe State) -> Stateful -> Stateful
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. (Stateful
clearDate Stateful -> Maybe State -> Maybe State
forall (m :: * -> *) a b. Monad m => (a -> m b) -> m a -> m b
=<<) (Maybe State -> Maybe State) -> Stateful -> Stateful
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Stateful
store)
    ]

event :: Event -> Stateful
event :: Event -> Stateful
event (EvKey Key
_ [Modifier]
_) = Stateful
normalMode
event Event
_           = Stateful
forall (f :: * -> *) a. Applicative f => a -> f a
pure