module Matterhorn.Events.ReactionEmojiListWindow
  ( onEventReactionEmojiListWindow
  , reactionEmojiListWindowKeybindings
  , reactionEmojiListWindowKeyHandlers
  )
where

import           Prelude ()
import           Matterhorn.Prelude

import qualified Graphics.Vty as Vty

import           Network.Mattermost.Types ( TeamId )

import           Matterhorn.Events.Keybindings
import           Matterhorn.State.ReactionEmojiListWindow
import           Matterhorn.State.ListWindow
import           Matterhorn.Types


onEventReactionEmojiListWindow :: TeamId -> Vty.Event -> MH ()
onEventReactionEmojiListWindow :: TeamId -> Event -> MH ()
onEventReactionEmojiListWindow TeamId
tId =
    MH Bool -> MH ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (MH Bool -> MH ()) -> (Event -> MH Bool) -> Event -> MH ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Lens' ChatState (ListWindowState (Bool, Text) ())
-> (KeyConfig -> KeyHandlerMap) -> Event -> MH Bool
forall a b.
Lens' ChatState (ListWindowState a b)
-> (KeyConfig -> KeyHandlerMap) -> Event -> MH Bool
onEventListWindow (TeamId -> Lens' ChatState TeamState
csTeam(TeamId
tId)((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListWindowState (Bool, Text) ()
     -> f (ListWindowState (Bool, Text) ()))
    -> TeamState -> f TeamState)
-> (ListWindowState (Bool, Text) ()
    -> f (ListWindowState (Bool, Text) ()))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListWindowState (Bool, Text) ()
 -> f (ListWindowState (Bool, Text) ()))
-> TeamState -> f TeamState
Lens' TeamState (ListWindowState (Bool, Text) ())
tsReactionEmojiListWindow)
           (TeamId -> KeyConfig -> KeyHandlerMap
reactionEmojiListWindowKeybindings TeamId
tId)

-- | The keybindings we want to use while viewing an emoji list window
reactionEmojiListWindowKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap
reactionEmojiListWindowKeybindings :: TeamId -> KeyConfig -> KeyHandlerMap
reactionEmojiListWindowKeybindings TeamId
tId = [KeyEventHandler] -> KeyConfig -> KeyHandlerMap
mkKeybindings (TeamId -> [KeyEventHandler]
reactionEmojiListWindowKeyHandlers TeamId
tId)

reactionEmojiListWindowKeyHandlers :: TeamId -> [KeyEventHandler]
reactionEmojiListWindowKeyHandlers :: TeamId -> [KeyEventHandler]
reactionEmojiListWindowKeyHandlers TeamId
tId =
    [ KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
CancelEvent Text
"Close the emoji search window"
      (TeamId
-> Lens' ChatState (ListWindowState (Bool, Text) ()) -> MH ()
forall a b.
TeamId -> Lens' ChatState (ListWindowState a b) -> MH ()
exitListWindow TeamId
tId (TeamId -> Lens' ChatState TeamState
csTeam(TeamId
tId)((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListWindowState (Bool, Text) ()
     -> f (ListWindowState (Bool, Text) ()))
    -> TeamState -> f TeamState)
-> (ListWindowState (Bool, Text) ()
    -> f (ListWindowState (Bool, Text) ()))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListWindowState (Bool, Text) ()
 -> f (ListWindowState (Bool, Text) ()))
-> TeamState -> f TeamState
Lens' TeamState (ListWindowState (Bool, Text) ())
tsReactionEmojiListWindow))
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
SearchSelectUpEvent Text
"Select the previous emoji" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
      TeamId -> MH ()
reactionEmojiListSelectUp TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
SearchSelectDownEvent Text
"Select the next emoji" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
      TeamId -> MH ()
reactionEmojiListSelectDown TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
PageDownEvent Text
"Page down in the emoji list" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
      TeamId -> MH ()
reactionEmojiListPageDown TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
PageUpEvent Text
"Page up in the emoji list" (MH () -> KeyEventHandler) -> MH () -> KeyEventHandler
forall a b. (a -> b) -> a -> b
$
      TeamId -> MH ()
reactionEmojiListPageUp TeamId
tId
    , KeyEvent -> Text -> MH () -> KeyEventHandler
mkKb KeyEvent
ActivateListItemEvent Text
"Post the selected emoji reaction"
      (TeamId
-> Lens' ChatState (ListWindowState (Bool, Text) ()) -> MH ()
forall a b.
TeamId -> Lens' ChatState (ListWindowState a b) -> MH ()
listWindowActivateCurrent TeamId
tId (TeamId -> Lens' ChatState TeamState
csTeam(TeamId
tId)((TeamState -> f TeamState) -> ChatState -> f ChatState)
-> ((ListWindowState (Bool, Text) ()
     -> f (ListWindowState (Bool, Text) ()))
    -> TeamState -> f TeamState)
-> (ListWindowState (Bool, Text) ()
    -> f (ListWindowState (Bool, Text) ()))
-> ChatState
-> f ChatState
forall b c a. (b -> c) -> (a -> b) -> a -> c
.(ListWindowState (Bool, Text) ()
 -> f (ListWindowState (Bool, Text) ()))
-> TeamState -> f TeamState
Lens' TeamState (ListWindowState (Bool, Text) ())
tsReactionEmojiListWindow))
    ]