module Taskell.Events.Actions.Modal
    ( event
    ) where

import ClassyPrelude

import Control.Lens ((^.))

import Graphics.Vty.Input.Events
import Taskell.Events.State.Types      (Stateful, mode)
import Taskell.Events.State.Types.Mode (ModalType (..), Mode (Modal))

import qualified Taskell.Events.Actions.Modal.Detail as Detail
import qualified Taskell.Events.Actions.Modal.Due    as Due
import qualified Taskell.Events.Actions.Modal.Help   as Help
import qualified Taskell.Events.Actions.Modal.MoveTo as MoveTo

event :: Event -> Stateful
event :: Event -> Stateful
event Event
e State
s =
    case State
s State -> Getting Mode State Mode -> Mode
forall s a. s -> Getting a s a -> a
^. Getting Mode State Mode
Lens' State Mode
mode of
        Modal ModalType
Help      -> Event -> Stateful
Help.event Event
e State
s
        Modal Detail {} -> Event -> Stateful
Detail.event Event
e State
s
        Modal ModalType
MoveTo    -> Event -> Stateful
MoveTo.event Event
e State
s
        Modal Due {}    -> Event -> Stateful
Due.event Event
e State
s
        Mode
_               -> Stateful
forall (f :: * -> *) a. Applicative f => a -> f a
pure State
s