taskell-1.11.3: src/Taskell/Events/Actions/Modal/Detail.hs
{-# LANGUAGE OverloadedLists #-}
module Taskell.Events.Actions.Modal.Detail
( event
, events
) where
import ClassyPrelude
import Graphics.Vty.Input.Events
import Taskell.Events.Actions.Types as A (ActionType(..))
import Taskell.Events.State (clearDate, normalMode, quit, store, undo, write)
import Taskell.Events.State.Modal.Detail as Detail
import Taskell.Events.State.Types
import Taskell.Events.State.Types.Mode (DetailItem(..), DetailMode(..))
import Taskell.IO.Keyboard.Types (Actions)
import qualified Taskell.UI.Draw.Field as F (event)
events :: Actions
events
-- general
=
[ (A.Quit, quit)
, (A.Undo, (write =<<) . undo)
, (A.Previous, previousSubtask)
, (A.Next, nextSubtask)
, (A.MoveUp, (write =<<) . (up =<<) . store)
, (A.MoveDown, (write =<<) . (down =<<) . store)
, (A.New, (Detail.insertMode =<<) . (Detail.lastSubtask =<<) . (Detail.newItem =<<) . store)
, (A.NewAbove, Detail.newAbove)
, (A.NewBelow, Detail.newBelow)
, (A.Edit, (Detail.insertMode =<<) . store)
, (A.Complete, (write =<<) . (setComplete =<<) . store)
, (A.Delete, (write =<<) . (Detail.remove =<<) . store)
, (A.DueDate, (editDue =<<) . store)
, (A.ClearDate, (write =<<) . (clearDate =<<) . store)
, (A.Detail, (editDescription =<<) . store)
]
normal :: Event -> Stateful
normal (EvKey KEsc _) = normalMode
normal _ = pure
insert :: Event -> Stateful
insert (EvKey KEsc _) s = do
item <- getCurrentItem s
case item of
DetailDescription -> (write =<<) $ finishDescription s
DetailDate -> showDetail s
(DetailItem _) -> (write =<<) . (showDetail =<<) $ finishSubtask s
insert (EvKey KEnter _) s = do
item <- getCurrentItem s
case item of
DetailDescription -> (write =<<) $ finishDescription s
DetailDate -> (write =<<) $ finishDue s
(DetailItem _) -> (Detail.newBelow =<<) . (write =<<) $ finishSubtask s
insert e s = updateField (F.event e) s
event :: Event -> Stateful
event e s = do
m <- getCurrentMode s
case m of
DetailNormal -> normal e s
(DetailInsert _) -> insert e s